MongoDB:过滤文档中的多个数组,然后将重复的数组合并为一个数据。

4

我在我的数据库中有这些数据集:

[{
  "id": 1,
  "date": "2019/11/30",
  "title": "Data Title",
  "tags": ["Javascript", "NodeJS", "Big Data", "MongoDB"],
},{
  "id": 2,
  "date": "2019/10/30",
  "title": "Data Title 2",
  "tags": ["Javascript", "React", "NodeJS", "Postgres"],
}]

目前我想做的是按标签分组数据,并返回类似于以下内容的值:

[{
  "id": 1,
  "tags": "Javascript",
  "data": [{
    "date": "2019/11/30",
    "title": "Data Title",
   },{
     "date": "2019/10/30",
     "title": "Data Title 2",
   }],
   "count": 2
 }, {
   "id": 2,
   "tags": "React",
   "data": [{
     "date": "2019/10/30",
     "title": "Data Title 2",
   }],
   "count": 1
}]

问题:如何使用MongoDB聚合查询获取数据?非常感谢!

1个回答

2
您需要对“tags”数组进行$unwind,并在其上执行$group聚合。
db.collection.aggregate([
  { "$unwind": "$tags" },
  { "$group": {
    "_id": "$tags",
    "data": {
      "$push": {
        "title": "$title",
        "date": "$date"
      }
    },
    "count": { "$sum": 1 }
  }}
])

1
嗨,Ashh,这正是我需要的!你的回答对每个人的参考都非常有用。非常感谢! - Ray

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接