Ano. Tak funguje javascript Array.prototype.slice() metoda funguje, kterou interně používá mongodb.
Podle specifikace jazyka ECMAScript® ,
Ve vašem případě relativeStart is -10 ,k = max((-10+5),0), k = 0; (kde 5 je délka vašeho pole).
Proto k nebo skip bude vždy 0 , v těchto případech.
Ano, operátor projekce tak funguje. Pokud není inclusion nebo exclusion je explicitně specifikováno v parametru projekce, celý dokument se načte pomocí operátorů projekce, jako je $slice ,$elemmatch se používá.
db.items.findOne({},{"_id":1,"List": { "$slice": [-10, 3 ] }})
by se vrátilo:
{ "_id" : ObjectId("542babf265f5de9a0d5c2928"), "List" : [ 1, 2, 3 ] }
Druhý parametr k findOne() metoda je not only for simple projection pole nejsou promítnuto, pouze pokud některé z field jména mají hodnotu 0 nebo 1 proti nim. Pokud ne, vrátí se celý dokument. Pokud má některé pole projection operator aby bylo použito, bylo by applied a projected .
Mechanismus projekce zdá se k následujícímu způsobu, kdykoli $slice je zapojen operátor.
- Ve výchozím nastavení budou pro promítání zahrnuta všechna pole.
- Ve výchozím nastavení jsou všechna pole, jejichž hodnoty jsou odvozeny na základě operátoru projekce
$slice, je-li pravdivé , jsou zobrazeny vždy, bez ohledu na níže uvedené.
Kroky provádějící vyloučení nebo zahrnutí.
- Seznam polí zadaných v parametru projekce se shromažďuje v určeném pořadí.
- Pouze pro první pole s hodnotou '0' nebo '1' :Pokud má pole hodnotu '0' - pak je vyloučeno a všechna zbývající pole jsou označena jako zahrnutá. Pokud má pole '1' - pak je zahrnuto a všechna zbývající pole jsou označena jako vyloučená.
- Všechna následující pole jsou vyloučena nebo zahrnuta na základě jejich hodnot.