Mongodb 聚合检查数组中的字段值出现了多少次?
Mongoldb aggregation check how many times a field value in an array comes up?
我有一组文件看起来像这样
{
_id : 21353456,
product : "xy",
text : "asdf",
reviews : [
{
username : "User1",
userID: 12
text : "hi",
},
{
username : "User2",
userID: 123
text : "hi1",
}
]
}
用户可以对不同的产品进行多次评论,我想检索至少进行了 3 次评论的所有用户。我想按字母顺序查看评论数、评论者姓名和 id。
我试过这段代码,但它不起作用
db.reviews.aggregate([{
$group:{
"_id": "$userID", "$userName","$text"
"numRev":{$numRev:{}}}}, {$match:{"numRev":{$gte: 3}}}, {$sort: {"reviewerName" : 1}}])
也许是这样的:
db.collection.aggregate([
{
$unwind: "$reviews"
},
{
$group: {
_id: "$reviews.username",
userID: {
$last: "$reviews.userID"
},
reviewsNum: {
$sum: 1
}
}
},
{
$match: {
reviewsNum: {
$gte: 3
}
}
},
{
$sort: {
_id: 1
}
}
])
解释:
- 展开评论数组
- 按用户名分组,这样您就可以获得每个用户的评论数
- 仅匹配那些评论 >=3
- 按_id->用户名排序。
我有一组文件看起来像这样
{
_id : 21353456,
product : "xy",
text : "asdf",
reviews : [
{
username : "User1",
userID: 12
text : "hi",
},
{
username : "User2",
userID: 123
text : "hi1",
}
]
}
用户可以对不同的产品进行多次评论,我想检索至少进行了 3 次评论的所有用户。我想按字母顺序查看评论数、评论者姓名和 id。 我试过这段代码,但它不起作用
db.reviews.aggregate([{
$group:{
"_id": "$userID", "$userName","$text"
"numRev":{$numRev:{}}}}, {$match:{"numRev":{$gte: 3}}}, {$sort: {"reviewerName" : 1}}])
也许是这样的:
db.collection.aggregate([
{
$unwind: "$reviews"
},
{
$group: {
_id: "$reviews.username",
userID: {
$last: "$reviews.userID"
},
reviewsNum: {
$sum: 1
}
}
},
{
$match: {
reviewsNum: {
$gte: 3
}
}
},
{
$sort: {
_id: 1
}
}
])
解释:
- 展开评论数组
- 按用户名分组,这样您就可以获得每个用户的评论数
- 仅匹配那些评论 >=3
- 按_id->用户名排序。