да Ето как javascript Array.prototype.slice()
методът работи, който се използва вътрешно от mongodb.
Съгласно Езикова спецификация ECMAScript® ,
Във вашия случай relativeStart is -10
,k = max((-10+5),0), k = 0;
(където, 5
е дължината на вашия масив).
Следователно k
или skip
винаги ще бъде 0
, в тези случаи.
Да, проекционният оператор работи по този начин. Освен ако не е inclusion
или exclusion
е изрично посочен в параметъра за проекция, целият документ се извлича с операторите за проекция като $slice
,$elemmatch
се прилага.
db.items.findOne({},{"_id":1,"List": { "$slice": [-10, 3 ] }})
ще върне:
{ "_id" : ObjectId("542babf265f5de9a0d5c2928"), "List" : [ 1, 2, 3 ] }
Вторият параметър към findOne()
методът е not only for simple projection
предназначение, полетата са сната проектирано, само ако някое от field
имената имат стойност 0
или 1
Срещу тях. Ако не се връща целият документ. Ако някое поле има projection operator
за да бъде приложен, ще бъде applied
и projected
.
Прожекционният механизъм изглежда да се случи по следния начин, когато $slice
участва оператор.
- По подразбиране всички полета ще бъдат включени за проекция.
- По подразбиране всички полета, чиито стойности се извличат въз основа на оператора за проекция,
$slice
, ако е истина , винаги се показват, независимо от по-долу.
Стъпки, предприети за изключване или включване.
- Списъкът с полета, посочени в параметъра на проекцията, се натрупват в посочения им ред.
- Само за първото срещано поле със стойност „0“ или „1“ :Ако полето има стойност '0' - то е изключено и всички останали полета са маркирани за включване. Ако поле има '1' - то е включено и всички останали полета са маркирани за изключване.
- За всички следващи полета те се изключват или включват въз основа на техните стойности.