MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

mongo $slice-Abfrageumkehrindex außerhalb des zulässigen Bereichs

Ja. So funktioniert das Javascript Array.prototype.slice() Methode funktioniert, die intern von mongodb verwendet wird.

Gemäß der ECMAScript®-Sprachspezifikation ,

In Ihrem Fall ist relativeStart is -10 ,k = max((-10+5),0), k = 0; (wobei 5 ist die Länge Ihres Arrays).

Daher k oder skip wird immer 0 sein , in diesen Fällen.

Ja, der Projektionsoperator funktioniert so. Es sei denn, es handelt sich um einen inclusion oder exclusion explizit im Projektionsparameter angegeben ist, wird das gesamte Dokument mit den Projektionsoperatoren wie $slice abgerufen ,$elemmatch angewendet wird.

db.items.findOne({},{"_id":1,"List": { "$slice": [-10, 3 ] }})

würde zurückgeben:

{ "_id" : ObjectId("542babf265f5de9a0d5c2928"), "List" : [ 1, 2, 3 ] }

Der zweite Parameter für findOne() Methode ist not only for simple projection Felder sind nicht projiziert, nur wenn eines der field Namen haben einen Wert von 0 oder 1 gegen sie. Wenn nicht, wird das gesamte Dokument zurückgegeben. Wenn irgendein Feld einen projection operator hat angewendet werden, würde es applied werden und projected .

Der Projektionsmechanismus scheint auf die folgende Weise geschehen, wenn $slice Bediener beteiligt ist.

  • Standardmäßig werden alle Felder für die Projektion eingeschlossen.
  • Standardmäßig alle Felder, deren Werte basierend auf dem Projektionsoperator $slice abgeleitet werden , wenn es wahr ist , werden immer angezeigt, unabhängig vom Folgenden.

Schritte, die zum Ausschluss oder Einschluss stattfinden.

  • Die Liste der im Projektionsparameter angegebenen Felder wird in der angegebenen Reihenfolge akkumuliert.
  • Nur für das erste Feld mit dem Wert '0' oder '1' :Wenn das Feld den Wert '0' hat, wird es ausgeschlossen, und alle verbleibenden Felder werden zum Einschließen markiert. Wenn ein Feld '1' hat, wird es eingeschlossen, und alle verbleibenden Felder werden zum Ausschließen markiert.
  • Für alle nachfolgenden Felder werden sie basierend auf ihren Werten ausgeschlossen oder eingeschlossen.