Mongodb + C#:如何查询子文档并按最常用的排序

Mongodb + C#: how to query sub-document and order by its used most

我有这样的合集Sites

 {
   _id: ObjectId("5ed4d2ed8a98dd17c467c040"),
   name:"Name1",
   description:"Desc1",
   tags:[
      "Tag1",
      "Tag3"
   ]
 },
 {
   _id: ObjectId("5ed4d2ed8a98dd17c467c040"),
   name:"Name2",
   description:"Desc2",
   tags:[
      "Tag1",
      "Tag3"
   ]
 },
 {
   _id: ObjectId("5ed4d2ed8a98dd17c467c040"),
   name:"Name3",
   description:"Desc3",
   tags:[
      "Tag1",
      "Tag4"
   ]
 },
 {
   _id: ObjectId("5ed4d2ed8a98dd17c467c040"),
   name:"Name4",
   description:"Desc4",
   tags:[
      "Tag3",
      "Tag4"
   ]
 },
 {
   _id: ObjectId("5ed4d2ed8a98dd17c467c040"),
   name:"Name5",
   description:"Desc6",
   tags:[
      "Tag1",
      "Tag2"
   ]
 }
]

我想按最常用的标签查询所有标签。

所以对于这个例子,查询应该是return

"Tag1", "Tag3", "Tag4", "Tag2"

因为

Tag1最多出现4次

Tag3出现3次

Tag4出现2次

最后 Tag2

请帮我做这样的查询。

提前致谢。

如果你只想按计数排序标签,你可以试试这个。

db.collection.aggregate([
  {
    "$unwind": "$tags"
  },
  {
    "$group": {
      "_id": "$tags",
      "count": {
        "$sum": 1
      }
    }
  },
  {
    "$sort": {
      "count": -1
    }
  },
  {
    "$group": {
      "_id": null,
      "tags": {
        "$push": "$_id"
      }
    }
  },
  {
    "$unset": "_id"
  }
])

这使得它成为一个排序的数组 tags.The 重要的部分是直到 $sort.

你可以试试代码here also