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.