MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

mongo $slice query inverso índice fora do intervalo


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.