あいつの日誌β

働きながら旅しています。

mongodb の aggregate

grouping したときのメモ

% mongo --version
MongoDB shell version: 2.6.1
% mongod --version
db version v2.6.1
2014-05-13T08:53:12.464+0900 git version: nogitversion
use test_db
db.dropDatabase();
db.testaggregate.insert(
{
    'a': 1,
});
db.testaggregate.insert(
{
    'a': 2,
});
db.testaggregate.insert(
{
    'a': 2,
});
db.testaggregate.insert(
{
    'a': 3,
}
);
db.testaggregate.insert(
{
    'a': 3,
}
);
db.testaggregate.insert(
{
    'a': 3,
}
);

grouping

db.testaggregate.aggregate({ 
    $group : {
        _id : "$a",
        count: {$sum: 1}
    }
});

{ "_id" : 3, "count" : 3 }
{ "_id" : 2, "count" : 2 }
{ "_id" : 1, "count" : 1 }

_id を保持したい場合は以下のようにするそうな

db.testaggregate.aggregate(
    {
        $group : {
            _id : "$a",
            count: {$sum: 1},
            originalIds: { $push: "$_id" }
        }
    }
);
{ "_id" : 3, "count" : 3, "originalIds" : [ ObjectId("5371651bedeb7279703bc565"), ObjectId("5371651bedeb7279703bc566"), ObjectId("5371651bedeb7279703bc567") ] }
{ "_id" : 2, "count" : 2, "originalIds" : [ ObjectId("5371651bedeb7279703bc563"), ObjectId("5371651bedeb7279703bc564") ] }
{ "_id" : 1, "count" : 1, "originalIds" : [ ObjectId("5371651aedeb7279703bc562") ] }

SEE ALSO

http://docs.mongodb.org/manual/reference/operator/aggregation/push/