statics
là các phương thức được định nghĩa trên Model. methods
được định nghĩa trên tài liệu (phiên bản).
Bạn có thể sử dụng tĩnh phương thức như Animal.findByName
:
const fido = await Animal.findByName('fido');
// fido => { name: 'fido', type: 'dog' }
Và bạn có thể sử dụng một phương pháp phiên bản như fido.findSimilarTypes
:
const dogs = await fido.findSimilarTypes();
// dogs => [ {name:'fido',type:'dog} , {name:'sheeba',type:'dog'} ]
Nhưng bạn sẽ không làm Animals.findSimilarTypes()
bởi vì Động vật là một mô hình, nó không có "loại". findSimilarTypes
cần một this.type
sẽ không tồn tại trong mô hình Động vật, chỉ một cá thể tài liệu mới chứa thuộc tính đó, như được định nghĩa trong mô hình.
Tương tự, bạn sẽ không¹ làm fido.findByName
bởi vì findByName
sẽ cần phải tìm kiếm trong tất cả các tài liệu và fido
chỉ là a tài liệu.
¹Vâng, về mặt kỹ thuật, bạn có thể , bởi vì phiên bản có quyền truy cập vào bộ sưu tập (this.constructor
hoặc this.model('Animal')
) nhưng sẽ không hợp lý (ít nhất là trong trường hợp này) nếu có một phương thức instance không sử dụng bất kỳ thuộc tính nào từ instance. (cảm ơn @AaronDufour đã chỉ ra điều này)