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.