Ja. Sådan er javascriptet Array.prototype.slice()
metode virker, som bruges internt af mongodb.
I henhold til ECMAScript®-sprogspecifikation ,
I dit tilfælde er relativeStart is -10
,k = max((-10+5),0), k = 0;
(hvor, 5
er længden af dit array).
Derfor k
eller skip
vil altid være 0
, i disse tilfælde.
Ja, projektionsoperatøren fungerer på den måde. Medmindre en inclusion
eller exclusion
er eksplicit angivet i projektionsparameteren, hentes hele dokumentet med projektionsoperatorerne såsom $slice
,$elemmatch
bliver anvendt.
db.items.findOne({},{"_id":1,"List": { "$slice": [-10, 3 ] }})
ville returnere:
{ "_id" : ObjectId("542babf265f5de9a0d5c2928"), "List" : [ 1, 2, 3 ] }
Den anden parameter til findOne()
metode er not only for simple projection
formål, felter er ikke projiceret, kun hvis nogen af field
navne har en værdi på 0
eller 1
imod dem. Hvis ikke returneres hele dokumentet. Hvis et felt har en projection operator
for at blive anvendt, ville det være applied
og projected
.
Projektionsmekanismen synes skal ske på nedenstående måde, når $slice
operatør er involveret.
- Som standard vil alle felter være inkluderet til projektion.
- Som standard alle felter, hvis værdier er afledt baseret på projektionsoperatoren,
$slice
, hvis sandt , vises altid, uanset nedenstående.
Trinn, der finder sted for udelukkelse eller inklusion.
- Listen over felter, der er angivet i projektionsparameteren, akkumuleres i deres specificerede rækkefølge.
- Kun for det første felt, der stødes på med værdien '0' eller '1' :Hvis feltet har en værdi '0' - så er det udelukket, og alle de resterende felter er markeret til at være inkluderet.Hvis et felt har '1' - så er det inkluderet, og alle de resterende felter er markeret til at blive ekskluderet.
- For alle de efterfølgende felter er de ekskluderet eller inkluderet baseret på deres værdier.