sql >> Database teknologi >  >> NoSQL >> MongoDB

Er det muligt at få en skive af en skive i Mongo?

Du skal bruge aggregeringspipelinen for at opnå en $slice kæde, på grund af begrænsningerne i projekterklæringen, der er en del af søgeforespørgslen.

Forespørgslen nedenfor er ugyldig, fordi den første $slice ville returnere et array i stedet for et indeks og udførelsen af ​​den ydre scoped $slice mislykkes.

db.collection.find({"name":"foo"},{text: {$slice:[{$slice: [1,1]}]}})

Desuden er der ingen måde at arbejde på et projekteret felt i den samme projekterklæring, hvis det var muligt, kunne vi have ændret teksten yderligere ved at anvende en $slice på den.

Vejen at gå ville være:

  • Match pladen med navnet som foo.
  • Unwind tekstarrayet for at komme til det første niveau.
  • Unwind igen for at nå det niveau, vi ønsker.
  • Group posterne sammen efter navn.
  • Project den sidste post i gruppen, som også er det sidste element i det sidst indlejrede array.

Koden:

db.collection.aggregate([
{$match:{"name":"foo"}},
{$unwind:"$text"},
{$unwind:"$text"},
{$group:{"_id":"$name","text":{$last:"$text"}}},
{$project:{"name":"$_id","text":1}}
])

eller hvis du ønsker at projicere et element, der vises i en bestemt rækkefølge, kan du bruge $skip og $limit operationer for at opnå dette.

var orderOfElement = 2;
db.collection.aggregate([
{$match:{"name":"foo"}},
{$unwind:"$text"},
{$unwind:"$text"},
{$skip:orderOfElement -1},
{$limit:1}
])

Som projicerer det andet element i rækkefølge i de indlejrede arrays.



  1. Hvordan kan jeg teste nye aggregeringsramme for Mongodb

  2. NodeJS-serveren hænger på Find Query af MongoDB ved samtidige anmodninger

  3. mongoDB-forespørgsel WHERE _id> tærskel

  4. Loopback-relationer udfylder ikke matrix af objekt-id'er