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
我有这样的合集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