如何在MongoDB中使用COUNT?

时间:2016-01-16 11:56:34

标签: mongodb

我的文件如下:

{
    "_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错了吗?

2 个答案:

答案 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来获取文档。