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.