Oui. C'est ainsi que le javascript Array.prototype.slice()
la méthode fonctionne, qui est utilisée en interne par mongodb.
Conformément à la Spécification du langage ECMAScript® ,
Dans votre cas, relativeStart is -10
,k = max((-10+5),0), k = 0;
(où, 5
est la longueur de votre tableau).
D'où k
ou skip
sera toujours 0
, dans ces cas.
Oui, l'opérateur de projection fonctionne de cette façon. Sauf une inclusion
ou exclusion
est explicitement spécifié dans le paramètre de projection, le document entier est récupéré avec les opérateurs de projection tels que $slice
,$elemmatch
en cours d'application.
db.items.findOne({},{"_id":1,"List": { "$slice": [-10, 3 ] }})
renverrait :
{ "_id" : ObjectId("542babf265f5de9a0d5c2928"), "List" : [ 1, 2, 3 ] }
Le deuxième paramètre de findOne()
la méthode est not only for simple projection
but, les champs ne sont pas projeté, uniquement si l'un des field
les noms ont une valeur de 0
ou 1
contre eux. Si ce n'est pas le cas, tout le document est renvoyé. Si un champ a un projection operator
pour être appliqué, il serait applied
et projected
.
Le mécanisme de projection semble se produire de la manière ci-dessous, chaque fois que le $slice
l'opérateur est impliqué.
- Par défaut, tous les champs seraient inclus pour la projection.
- Par défaut, tous les champs dont les valeurs sont dérivées en fonction de l'opérateur de projection,
$slice
, si véridique , sont toujours affichés, indépendamment de ce qui suit.
Étapes en cours pour l'exclusion ou l'inclusion.
- La liste des champs spécifiés dans le paramètre de projection est cumulée dans l'ordre spécifié.
- Seulement pour le premier champ rencontré avec la valeur '0' ou '1' :Si le champ a une valeur '0' - alors il est exclu, et tous les champs restants sont marqués pour être inclus. Si un champ a '1' - alors il est inclus, et tous les champs restants sont marqués pour être exclus.
- Pour tous les champs suivants, ils sont exclus ou inclus en fonction de leurs valeurs.