Home > OS >  How to properly lookup for several fields in mongodb?
How to properly lookup for several fields in mongodb?

Time:02-05

Let's say i have 2 collections

// Post collection:
{
    "_id": "61f7a933b209737de4cc2657",
    "author": "61d30188cf93e83e08d14112",
    "title": "Some title",
    "createts": 1643620659355
}

// User collection:

{
    "_id": "61d30188cf93e83e08d14112",
    "nickname": "Bob",
    "link": "bobspage"
}

And i need to get this result

{
    "_id": "61f7a933b209737de4cc2657",
    "author": {
        "_id": "61d30188cf93e83e08d14112",
        "nickname": "Bob",
        "link": "bobspage"
    },
    "title": "Some title",
    "createts": 1643620659355
}

How can i make a request with aggregation, which will display this output ?

CodePudding user response:

Simply use $lookup in an aggregation query:

  • First $lookup, which generate a field called author which is an array with all values joined.
  • To get author as an object get the first result for the array using $arrayElemAt.
db.post.aggregate([
  {
    "$lookup": {
      "from": "user",
      "localField": "author",
      "foreignField": "_id",
      "as": "author"
    }
  },
  {
    "$addFields": {
      "author": {
        "$arrayElemAt": [
          "$author",
          0
        ]
      }
    }
  }
])

Example here

  •  Tags:  
  • Related