Ja. Det är så javascriptet Array.prototype.slice() metod fungerar, som används internt av mongodb.
Enligt ECMAScript®-språkspecifikationen ,
I ditt fall är relativeStart is -10 ,k = max((-10+5),0), k = 0; (där, 5 är längden på din array).
Därav k eller skip kommer alltid att vara 0 , i dessa fall.
Ja, projektionsoperatören fungerar på det sättet. Såvida inte en inclusion eller exclusion är explicit specificerad i projektionsparametern, hämtas hela dokumentet med projektionsoperatorerna såsom $slice ,$elemmatch tillämpas.
db.items.findOne({},{"_id":1,"List": { "$slice": [-10, 3 ] }})
skulle returnera:
{ "_id" : ObjectId("542babf265f5de9a0d5c2928"), "List" : [ 1, 2, 3 ] }
Den andra parametern till findOne() Metoden är not only for simple projection syfte, fält är inte projiceras, endast om något av field namn har värdet 0 eller 1 mot dem. Om inte returneras hela dokumentet. Om något fält har en projection operator för att tillämpas skulle det vara applied och projected .
Projektionsmekanismen verkar ske på nedanstående sätt, när $slice operatören är inblandad.
- Som standard inkluderas alla fält för projicering.
- Som standard är alla fält vars värden härleds baserat på projektionsoperatorn,
$slice, om sant , visas alltid, oavsett nedanstående.
Steg för uteslutning eller inkludering.
- Listan över fält som anges i projektionsparametern ackumuleras i den angivna ordningen.
- Endast för det första fältet som påträffas med värdet "0" eller "1" :Om fältet har värdet '0' - så exkluderas det, och alla återstående fält markeras för att inkluderas. Om ett fält har '1' - inkluderas det, och alla återstående fält markeras som exkluderade.
- För alla efterföljande fält är de uteslutna eller inkluderade baserat på deras värden.