2

我有一个 MongoDB 集合,我需要在字段中找到每个不同的值,以及每个值出现的次数,有点像 SQL 中的 GROUP BY 和 COUNT 函数。

例如

Item name ------ count

Soap ----------- 7
Apples --------- 4
Tin Foil ------- 5

我是 MongoDB 的新手,还没有真正找到任何可以帮助我解决这个问题的文档。到目前为止,我已经能够返回不同值的列表,但不能返回每个值的计数。

我需要通过 Java MongoDB 库来做到这一点。

4

3 回答 3

2
db.item.aggregate([
{
    $group: {
        _id: "$name",
        count: {
            "$sum": 1
        }
    }
},
{
    $project: {
        _id: 0,
        name: "$_id",
        count: 1
    }
}
]).pretty();

一个java实现将是这样的

    final MongoClient mongoClient = new MongoClient();
    final DB db = mongoClient.getDB("DB_NAME");
    final DBCollection collection = db.getCollection("item");

    final DBObject groupIdFields = new BasicDBObject("_id", "$name");

    groupIdFields.put("count", new BasicDBObject("$sum", 1));
    final DBObject group = new BasicDBObject("$group", groupIdFields);

    final DBObject projectFields = new BasicDBObject("_id", 0);
    projectFields.put("name", "$_id");
    projectFields.put("count", 1);
    final DBObject project = new BasicDBObject("$project", projectFields);

    final AggregationOutput aggregate = collection.aggregate(group, project);
于 2014-05-14T18:04:20.043 回答
1

您可以通过MongoDB Java 驱动程序的DBCollection 类使用count()distinct()group()命令进行简单的聚合。

对于当前 MongoDB (2.0.6) 生产版本中的更高级查询,您可以通过MapReduceCommand 类使用Map/Reduce

在 MongoDB 2.2(目前正在测试发布)中有一个新的聚合框架特性。Java 驱动程序的 2.9.0 版本将包含一个聚合助手

于 2012-07-31T10:30:03.020 回答
0

我不是 mongodb 专家,但它似乎是使用MongoDB MapReduce 功能执行聚合或查看有关MongoDB 聚合的链接的好地方。

相关问题:

于 2012-07-31T09:46:34.647 回答