Sim. É assim que o javascript
Array.prototype.slice()
funciona, que é usado internamente pelo mongodb. De acordo com a Especificação da linguagem ECMAScript® ,
No seu caso
relativeStart is -10
,k = max((-10+5),0), k = 0;
(onde, 5
é o comprimento do seu array). Portanto,
k
ou skip
sempre será 0
, nesses casos. Sim, o operador de projeção funciona assim. A menos que uma
inclusion
ou exclusion
é explicitamente especificado no parâmetro de projeção, todo o documento é recuperado com os operadores de projeção, como $slice
,$elemmatch
Sendo aplicado. db.items.findOne({},{"_id":1,"List": { "$slice": [-10, 3 ] }})
retornaria:
{ "_id" : ObjectId("542babf265f5de9a0d5c2928"), "List" : [ 1, 2, 3 ] }
O segundo parâmetro para o
findOne()
método é not only for simple projection
propósito, os campos não projetada, somente se qualquer um dos field
nomes têm um valor de 0
ou 1
contra eles. Caso contrário, todo o documento é devolvido. Se algum campo tiver um projection operator
para ser aplicado, seria applied
e projected
. O mecanismo de projeção parece acontecer da maneira abaixo, sempre que o
$slice
operador está envolvido. - Por padrão, todos os campos seriam incluídos para projeção.
- Por padrão todos os campos cujos valores são derivados com base no operador de projeção,
$slice
, se for verdadeiro , são sempre exibidos, independentemente do abaixo.
Etapas que ocorrem para exclusão ou inclusão.
- A lista de campos especificada no parâmetro de projeção é acumulada na ordem especificada.
- Somente para o primeiro campo encontrado com valor '0' ou '1' :Se o campo tiver um valor '0' - ele será excluído e todos os campos restantes serão marcados para serem incluídos.Se um campo tiver '1' - então ele será incluído e todos os campos restantes serão marcados para serem excluídos.
- Para todos os campos subsequentes, eles são excluídos ou incluídos com base em seus valores.