sql >> Databasteknik >  >> NoSQL >> MongoDB

mongo $slice-fråga omvänd index utanför intervallet

Ja. Det är så javascriptet Array.prototype.slice() metod fungerar, som används internt av mongodb.

Enligt ECMAScript®-språkspecifikationen ,

I ditt fall är relativeStart is -10 ,k = max((-10+5),0), k = 0; (där, 5 är längden på din array).

Därav k eller skip kommer alltid att vara 0 , i dessa fall.

Ja, projektionsoperatören fungerar på det sättet. Såvida inte en inclusion eller exclusion är explicit specificerad i projektionsparametern, hämtas hela dokumentet med projektionsoperatorerna såsom $slice ,$elemmatch tillämpas.

db.items.findOne({},{"_id":1,"List": { "$slice": [-10, 3 ] }})

skulle returnera:

{ "_id" : ObjectId("542babf265f5de9a0d5c2928"), "List" : [ 1, 2, 3 ] }

Den andra parametern till findOne() Metoden är not only for simple projection syfte, fält är inte projiceras, endast om något av field namn har värdet 0 eller 1 mot dem. Om inte returneras hela dokumentet. Om något fält har en projection operator för att tillämpas skulle det vara applied och projected .

Projektionsmekanismen verkar ske på nedanstående sätt, när $slice operatören är inblandad.

  • Som standard inkluderas alla fält för projicering.
  • Som standard är alla fält vars värden härleds baserat på projektionsoperatorn, $slice , om sant , visas alltid, oavsett nedanstående.

Steg för uteslutning eller inkludering.

  • Listan över fält som anges i projektionsparametern ackumuleras i den angivna ordningen.
  • Endast för det första fältet som påträffas med värdet "0" eller "1" :Om fältet har värdet '0' - så exkluderas det, och alla återstående fält markeras för att inkluderas. Om ett fält har '1' - inkluderas det, och alla återstående fält markeras som exkluderade.
  • För alla efterföljande fält är de uteslutna eller inkluderade baserat på deras värden.


  1. MongoDB '$or' och regex i PHP

  2. Bästa sättet att ansluta till MongoDB med Node.js

  3. Hur man byter namn på flera nycklar i Redis

  4. MongoDB findOneAndDelete()