Ja. Dat is hoe de javascript Array.prototype.slice()
methode werkt, die intern wordt gebruikt door mongodb.
Volgens de ECMAScript®-taalspecificatie ,
In jouw geval is relativeStart is -10
,k = max((-10+5),0), k = 0;
(waar, 5
is de lengte van je array).
Vandaar k
of skip
is altijd 0
, in deze gevallen.
Ja, de projectie-operator werkt op die manier. Tenzij een inclusion
of exclusion
expliciet is gespecificeerd in de projectieparameter, wordt het hele document opgehaald met de projectie-operators zoals $slice
,$elemmatch
wordt toegepast.
db.items.findOne({},{"_id":1,"List": { "$slice": [-10, 3 ] }})
zou terugkeren:
{ "_id" : ObjectId("542babf265f5de9a0d5c2928"), "List" : [ 1, 2, 3 ] }
De tweede parameter voor de findOne()
methode is not only for simple projection
doel, velden zijn niet geprojecteerd, alleen als een van de field
namen hebben een waarde van 0
of 1
tegen hun. Zo niet, dan wordt het hele document teruggestuurd. Als een veld een projection operator
heeft om te worden toegepast, is het applied
en projected
.
Het projectiemechanisme lijkt gebeuren op de onderstaande manier, wanneer de $slice
operator is erbij betrokken.
- Standaard worden alle velden opgenomen voor projectie.
- Standaard alle velden waarvan de waarden zijn afgeleid op basis van de projectie-operator,
$slice
, indien waarheidsgetrouw , worden altijd weergegeven, ongeacht de onderstaande.
Stappen die plaatsvinden voor uitsluiting of opname.
- De lijst met velden gespecificeerd in de projectieparameter wordt verzameld in de gespecificeerde volgorde.
- Alleen voor het eerste gevonden veld met de waarde '0' of '1' :Als het veld een waarde '0' heeft - dan wordt het uitgesloten, en alle overige velden zijn gemarkeerd om te worden opgenomen. Als een veld '1' heeft - dan wordt het opgenomen, en alle overige velden zijn gemarkeerd om te worden uitgesloten.
- Voor alle volgende velden worden ze uitgesloten of opgenomen op basis van hun waarden.