sql >> Databáze >  >> NoSQL >> MongoDB

Vraťte poslední dokument z vyhledávání

Můžete použít buď $slice

db.groups.aggregate([
   { "$lookup": {
     "from": "posts",
     "localField": "_id",
     "foreignField": "group",
     "as": "post"
   }},
   { "$addFields": {
     "post": { "$slice": ["$post", -1] }
   }}
])

Nebo s MongoDB 3.6 stačí vrátit poslední příspěvek pomocí $lookup v nekorelované podobě:

db.groups.aggregate([
   { "$lookup": {
     "from": "posts",
     "as": "post",
     "let": { "id": "$_id" },
     "pipeline": [
       { "$match": { 
          "$expr": { "$eq": [ "$$id", "$group" ] }
       }},
       { "$sort": { "_id": -1 } },
       { "$limit": 1 }
     ]
   }}
])

To druhé je lepší, protože vrátíte pouze dokument ze zahraniční sbírky, který skutečně chcete.

Pokud jste si jisti, že chcete "singulární", pak $arrayElemAt je zaměnitelné s $slice v počátečním příkladu, ale vrátí poslední prvek namísto pole pouze posledního prvku. Můžete jej také přidat do druhého formuláře a vzít pouze jeden prvek z potrubí, což je „vždy“ pole:

db.groups.aggregate([
   { "$lookup": {
     "from": "posts",
     "as": "post",
     "let": { "id": "$_id" },
     "pipeline": [
       { "$match": { 
          "$expr": { "$eq": [ "$$id", "$group" ] }
       }},
       { "$sort": { "_id": -1 } },
       { "$limit": 1 }
     ]
   }},
   { "$addFields": {
     "post": { "$arrayElemAt": [ "$post", 0 ] }
   }}
])

A takto je to 0 index spíše než -1 naposledy.




  1. Kdy Redis? Kdy MongoDB?

  2. Vložte soubor json do mongodb

  3. MongoDB Ukázkové operátory

  4. Nelze se připojit k serveru redis z kontejneru docker