Đúng. Đó là cách javascript Array.prototype.slice()
phương thức hoạt động, được sử dụng nội bộ bởi mongodb.
Theo Đặc tả ngôn ngữ ECMAScript® ,
Trong trường hợp của bạn relativeStart is -10
, k = max((-10+5),0), k = 0;
(trong đó, 5
là độ dài của mảng của bạn).
Do đó k
hoặc skip
sẽ luôn là 0
, trong những trường hợp này.
Có, toán tử chiếu hoạt động theo cách đó. Trừ khi inclusion
hoặc exclusion
được chỉ định rõ ràng trong tham số chiếu, toàn bộ tài liệu được truy xuất bằng các toán tử chiếu như $slice
, $elemmatch
đang được áp dụng.
db.items.findOne({},{"_id":1,"List": { "$slice": [-10, 3 ] }})
sẽ trở lại:
{ "_id" : ObjectId("542babf265f5de9a0d5c2928"), "List" : [ 1, 2, 3 ] }
Tham số thứ hai cho findOne()
phương thức not only for simple projection
mục đích, các trường không được chiếu, chỉ khi bất kỳ một trong các trường field
tên có giá trị 0
hoặc 1
chống lại họ. Nếu không, toàn bộ tài liệu được trả lại. Nếu bất kỳ trường nào có projection operator
được áp dụng, nó sẽ được applied
và projected
.
Cơ chế chiếu dường như xảy ra theo cách dưới đây, bất cứ khi nào $slice
nhà điều hành có liên quan.
- Theo mặc định, tất cả các trường sẽ được đưa vào để chiếu.
- Theo Mặc định, tất cả các trường có giá trị được lấy dựa trên toán tử phép chiếu,
$slice
, nếu sự thật , luôn được hiển thị, không phân biệt bên dưới.
Các bước diễn ra để loại trừ hoặc đưa vào.
- Danh sách các trường được chỉ định trong tham số chiếu được tích lũy theo thứ tự đã chỉ định của chúng.
- Chỉ dành cho trường đầu tiên gặp phải giá trị '0' hoặc '1' :Nếu trường có giá trị '0' - thì nó bị loại trừ và tất cả các trường còn lại được đánh dấu là được đưa vào. Nếu trường có '1' - thì nó được bao gồm và tất cả các trường còn lại được đánh dấu là bị loại trừ.
- Đối với tất cả các trường tiếp theo, chúng bị loại trừ hoặc bao gồm các giá trị thừa kế.