计算按标签分组的文章mongodb

我有很多文章都有一个称为标签的字段,并且是标签_id的数组,出于统计目的,我想计算每个标签有多少篇文章。如果标记是一个简单的标记_id,这很容易,因为我可以按标记分组,但它是标记数组,并且不能按该字段分组。

首先,我尝试一下:

db.note.aggregate([{$match: {
  publishedAt: {
    $gte: ISODate('2018-01-01'),$lte: ISODate('2019-01-01')
  }
}},{$group: {
  _id: "$tags","total": {
    "$sum": 1
  }
}},{$lookup: {
  from: 'tags',localField: '_id',foreignField: '_id',as: 'tag'
}},{$unwind: {
  path: "$tag"
}},{$project: {
  total: 1,"tag.name": 1
}},{$sort: {
  total: -1
}}])

但这不起作用,该查询按标签分组,所以我尝试这样做:

{
                '$match': {
                  'publishedAt': {
                    '$gte': new Date(req.body.gte),'$lte': new Date(req.body.lte)
                  }
                }
              },{
                '$unwind': {
                  'path': '$tags'
                }
              },{
                '$group': {
                  '_id': '$tags','total': {
                    '$sum': 1
                  }
                }
              },{
                '$lookup': {
                  'from': 'tags','localField': '_id','foreignField': '_id','as': 'tag'
                }
              },{
                '$project': {
                  'total': 1,'tag.name': 1
                }
              },{
                '$sort': {
                  'total': -1
                }
              },{
                '$unwind': {
                  'path': '$tag'
                }
              }
            )

但是问题是,该组是数组中第一个标签,而我错过了该数组中的所有其他标签。

您认为解决方案是什么?

yoyo520621 回答:计算按标签分组的文章mongodb

  

我有很多文章都带有标签字段,并且是由   标签_ids,出于统计目的,我想计算多少   每个标签都有的文章。

您可以尝试执行此操作(我假设使用以下输入文档):

注释:

{ _id: 1,name: "art-1",author: "ab",tags: [ "t1","t2" ] },{ _id: 2,name: "art-2",author: "cd","t3" ] },{ _id: 3,name: "art-3",author: "wx",tags: [ "t4",{ _id: 4,name: "art-4",author: "yx",tags: [ "t1" ] }

标签:

{ _id: 1,id: "t1",name: "t1's name" },id: "t2",name: "t2's name" },id: "t3",name: "t3's name" },id: "t4",name: "t4's name" }


查询:

db.tags.aggregate( [
{
  $lookup: {
    from: "notes",localField: "id",foreignField: "tags",as: "tag_matches"
  }
},{ $project: {  id: 1,name: 1,_id: 0,count: { $size: "$tag_matches" } } }
] )

输出:

{ "id" : "t1","name" : "t1's name","count" : 3 }
{ "id" : "t2","name" : "t2's name","count" : 1 }
{ "id" : "t3","name" : "t3's name","count" : 2 }
{ "id" : "t4","name" : "t4's name","count" : 1 }
本文链接:https://www.f2er.com/3084462.html

大家都在问