Rohan
Rohan

Reputation: 45

Aggregation: Mongodb aggregation query example

Record is database:

[
  {
    "title": "title1",
    "author": [
      {
        "name": "user1",
        "register": true
      },
      {
        "name": "user2",
        "register": true
      }
    ],
    "tags": [
      "tag1",
      "tag2",
      "tag3"
    ]
  },
  {
    "title": "title2",
    "author": [
      {
        "name": "user1",
        "register": true
      },
      {
        "name": "user2",
        "register": true
      }
    ],
    "tags": [
      "tag1",
      "tag2",
      "tag3"
    ]
  },
  {
    "title": "title3",
    "author": [
      {
        "name": "user1",
        "register": true
      },
      {
        "name": "user2",
        "register": true
      }
    ],
    "tags": [
      "tag1",
      "tag2",
      "tag3"
    ]
  }
]

expected output:

{"tag":"tag1", "titles":["title1","title2","title3"], "size":3}
{"tag":"tag2", "titles":["title2","title4"], "size":2}

Can someone help with aggregate query?

Upvotes: 0

Views: 352

Answers (1)

varman
varman

Reputation: 8894

You can use group

  • $unwind to deconstruct the array
  • $group to regroup the based on tags
  • $project to show the desired output

Here is the code,

db.collection.aggregate([
  { "$unwind": "$tags" },
  {
    "$group": {
      "_id": "$tags",
      "titles": { "$push": "$title" }
    }
  },
  {
    $project: {
      tag: "$_id",
      titles: 1,
      size: { $size: "$titles" },
      _id: "$$REMOVE"
    }
  }
])

Working Mongo playground

Upvotes: 3

Related Questions