TAk. W ten sposób javascript Array.prototype.slice() działa metoda, która jest wewnętrznie używana przez mongodb.
Zgodnie ze Specyfikacją języka ECMAScript® ,
W Twoim przypadku relativeStart is -10 ,k = max((-10+5),0), k = 0; (gdzie, 5 to długość Twojej tablicy).
Stąd k lub skip zawsze będzie 0 , w takich przypadkach.
Tak, operator projekcji działa w ten sposób. Chyba że inclusion lub exclusion jest wyraźnie określony w parametrze projekcji, cały dokument jest pobierany za pomocą operatorów projekcji, takich jak $slice ,$elemmatch stosowane.
db.items.findOne({},{"_id":1,"List": { "$slice": [-10, 3 ] }})
zwróci:
{ "_id" : ObjectId("542babf265f5de9a0d5c2928"), "List" : [ 1, 2, 3 ] }
Drugi parametr findOne() metoda jest not only for simple projection celu, pola nie przewidywane, tylko jeśli którekolwiek z field nazwy mają wartość 0 lub 1 przeciwko nim. Jeśli nie, zwracany jest cały dokument. Jeśli jakiekolwiek pole ma projection operator do zastosowania, byłoby applied i projected .
Mechanizm projekcji wydaje się dzieje się w następujący sposób, za każdym razem, gdy $slice zaangażowany jest operator.
- Domyślnie wszystkie pola zostaną uwzględnione w projekcji.
- Domyślnie wszystkie pola, których wartości są wyprowadzane na podstawie operatora projekcji,
$slice, jeśli są prawdziwe , są zawsze wyświetlane, niezależnie od poniższych.
Kroki mające na celu wykluczenie lub włączenie.
- Lista pól określonych w parametrze projekcji jest gromadzona w określonej kolejności.
- Tylko dla pierwszego napotkanego pola z wartością „0” lub „1” :Jeżeli pole ma wartość '0' - to jest wykluczone, a wszystkie pozostałe pola są oznaczone do uwzględnienia. Jeżeli pole ma '1' - to jest uwzględniane, a wszystkie pozostałe pola są oznaczane do wykluczenia.
- W przypadku wszystkich kolejnych pól są one wykluczane lub uwzględniane na podstawie ich wartości.