web-dev-qa-db-ja.com

MongoDB SELECT COUNT GROUP BY

私はMongoDBを使って簡単な方法を見つけようとしています。

SELECT province, COUNT(*) FROM contest GROUP BY province

しかし、集計関数を使用してそれを理解することはできません。本当に変なグループ構文を使ってそれを行うことができます

db.user.group({
    "key": {
        "province": true
    },
    "initial": {
        "count": 0
    },
    "reduce": function(obj, prev) {
        if (true != null) if (true instanceof Array) prev.count += true.length;
        else prev.count++;
    }
});

しかし、集計関数を使用するより簡単な方法はありますか。

123
Steven

これは aggregate を使って簡単に行うことができます。

db.contest.aggregate([
    {"$group" : {_id:"$province", count:{$sum:1}}}
])
241
Anand Jayabalan

グループ化するために複数の列が必要な場合は、このモデルに従ってください。ここで私はstatustypeによるカウントを行っています。

  db.BusinessProcess.aggregate({
    "$group": {
        _id: {
            status: "$status",
            type: "$type"
        },
        count: {
            $sum: 1
        }
    }
   })
38
KitkatJohn

集計関数の結果に基づいて、追加の操作が必要です。最後に、MongoDBで集計関数とその結果に基づいた操作の解決方法を見つけました。フィールドrequest, source, status, requestDateを持つコレクションRequestを作成しました。

&フィールド数による単一フィールドグループ

db.Request.aggregate([
    {"$group" : {_id:"$source", count:{$sum:1}}}
])

複数のフィールドでグループ化して数を数える:

db.Request.aggregate([
    {"$group" : {_id:{source:"$source",status:"$status"}, count:{$sum:1}}}
])

複数のフィールドでグループ化し、フィールドを使用して並べ替えてカウント:

db.Request.aggregate([
    {"$group" : {_id:{source:"$source",status:"$status"}, count:{$sum:1}}},
    {$sort:{"_id.source":1}}
])

複数のフィールドでグループ化して、カウントを使用してソートでカウント:

db.Request.aggregate([
    {"$group" : {_id:{source:"$source",status:"$status"}, count:{$sum:1}}},
    {$sort:{"count":-1}}
])
36
csharpbd

さらに、グループ化を制限する必要がある場合は、次のものを使用できます。

db.events.aggregate( 
    {$match: {province: "ON"}},
    {$group: {_id: "$date", number: {$sum: 1}}}  
)
11
andre

このタイプのクエリは私のために働きました:

 db.events.aggregate({$group: {_id : "$date", number:  { $sum : 1} }} )

http://docs.mongodb.org/manual/tutorial/aggregation-with-user-preference-data/ を参照してください。

7
prule

MongoDB 3.4から、$sortByCount集計を使用できます。

指定された式の値に基づいて着信文書をグループ化してから、各個別グループ内の文書の数を計算します。

https://docs.mongodb.com/manual/reference/operator/aggregation/sortByCount/

例えば:

db.contest.aggregate([
    { $sortByCount: "$province" }
]);
2
MattM