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.