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



我有一个像这样的集合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"
]
}
]

我想通过一个最常用的标签来查询所有有顺序的标签。

在这个例子中,查询应该是返回

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

因为Tag1出现次数最多4次

Tag3出现3次

Tag4出现两次

And finalTag2

请帮我做这样的查询。

提前感谢。

如果您只想按计数对标签进行排序,您可以尝试这样做。

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

这使它成为一个排序标记数组。重要的部分是直到$sort.

你也可以试试这里的代码

最新更新