MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

mongo $slice query indice inverso fuori intervallo

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.