我的文件如下:
{
"_id": ObjectId("5698fcb5585b2de0120eba31"),
"id": "26125242313",
"parent_id": "26125241841",
"link_id": "10024080",
"name": "26125242313",
"author": "gigaquack",
"body": "blogging = creative writing",
"subreddit_id": "6",
"subreddit": "reddit.com",
"score": "27",
"created_utc": "2007-10-22 18:39:31"
}
我要做的是创建一个查询,查找仅发布到1 subreddit的用户。我使用查询在SQL中执行了此操作:
Select distinct author, subreddit from reddit group by author having count(*) = 1;
我正在尝试在MongoDB中做类似的事情但是遇到了一些问题。 我设法通过使用聚合组重新创建选择不同但我无法弄清楚如何解决HAVING COUNT部分。
这就是我的查询:
db.collection.aggregate(
[{"$group":
{ "_id": { author: "$author", subreddit: "$subreddit" } } },
{$match:{count:1}} // This part is not working
])
我使用$ match错了吗?
答案 0 :(得分:13)
您的查询应该是:
db.collection.aggregate([{
'$group': {
'_id': {'author': '$author', 'subreddit': '$subreddit'},
'count': {'$sum': 1},
'author': {'$last': '$author'}}
}, {
'$match': {
'count': {'$eq': 1}
}}])
其中数据是具有匹配文档的一长列表。
如果你想得到一些确切的字段,它应该是这样的:
git remote add uppstream githubURL
答案 1 :(得分:1)
运行以下聚合管道以获得所需的结果:
db.collection.aggregate([
{
"$group": {
"_id": {
"author": "$author",
"subreddit": "$subreddit"
},
"count": { "$um": 1 }
}
},
{ "$match": { "count": 1 } },
{
"$project": {
"_id": 0,
"author": "$_id.author",
"subreddit": "$_id.subreddit"
}
}
])
在您之前的尝试中,您错过了 $sum
组累加器运算符,以获取分组文档的计数和最终聚合管道步骤 $project
< / strong>,在SQL select语句中使用所需的字段,author和subreddit来获取文档。