Sì. È così che javascript Array.prototype.slice() il metodo funziona, utilizzato internamente da mongodb.
Secondo la Specifica del linguaggio ECMAScript® ,
Nel tuo caso relativeStart is -10 ,k = max((-10+5),0), k = 0; (dove, 5 è la lunghezza dell'array).
Quindi k o skip sarà sempre 0 , in questi casi.
Sì, l'operatore di proiezione funziona in questo modo. A meno che non sia un inclusion o exclusion è esplicitamente specificato nel parametro di proiezione, l'intero documento viene recuperato con gli operatori di proiezione come $slice ,$elemmatch in corso di applicazione.
db.items.findOne({},{"_id":1,"List": { "$slice": [-10, 3 ] }})
ritornerebbe:
{ "_id" : ObjectId("542babf265f5de9a0d5c2928"), "List" : [ 1, 2, 3 ] }
Il secondo parametro per findOne() il metodo è not only for simple projection scopo, i campi non proiettato, solo se uno qualsiasi dei field i nomi hanno un valore di 0 o 1 contro di loro. In caso contrario, viene restituito l'intero documento. Se un campo ha un projection operator da applicare, sarebbe applied e projected .
Il meccanismo di proiezione sembra accada nel modo seguente, ogni volta che il $slice operatore è coinvolto.
- Per impostazione predefinita, tutti i campi sarebbero inclusi per la proiezione.
- Di default tutti i campi i cui valori sono derivati in base all'operatore di proiezione,
$slice, se veritiero , vengono sempre visualizzati, indipendentemente da quanto segue.
Passi in atto per l'esclusione o l'inclusione.
- L'elenco dei campi specificati nel parametro di proiezione viene accumulato nell'ordine specificato.
- Solo per il primo campo incontrato con valore '0' o '1' :Se il campo ha un valore '0' - allora è escluso e tutti i campi rimanenti sono contrassegnati per essere inclusi. Se un campo ha '1' - allora è incluso e tutti i campi rimanenti sono contrassegnati per essere esclusi.
- Per tutti i campi successivi, sono esclusi o inclusi in base ai loro valori.