Mongo聚合查询的Java语法

时间:2018-04-04 08:55:44

标签: mongodb aggregation-framework mongodb-java

我遇到了Mongo查询的Java语法。

我已经为控制台编写了Mongo查询,但我想要该查询的相应Java语法。

这是shell命令:

db.errorsegmentaudit.aggregate([
    {$sort:{timestamp:1}},
    {$limit:1},
    {$unwind:"$auditErrorTypeCounts"},
    {$unwind:"$auditErrorTypeCounts.auditErrorCounts"}, 
    {$group: {
            _id: {
                "agent": "$auditErrorTypeCounts.auditErrorCounts.agentName", 
                "type":"$auditErrorTypeCounts.typeOfError"
            }, 
            count: {
                $sum: "$auditErrorTypeCounts.auditErrorCounts.countOfErrors"
            }
        }    
    } 
])

我已经阅读了文档,但是所有文档都找不到合适的文档。我尝试在Java中使用Aggregation类,但它没有用。

1 个答案:

答案 0 :(得分:0)

在您的问题中,MongoDB Java驱动程序(使用版本3.x)等效于MongoDB shell命令:

MongoClient mongoClient = ...;

MongoCollection<Document> collection = mongoClient.getDatabase("...").getCollection("..");

AggregateIterable<Document> documents = collection.aggregate(Arrays.asList(
        // $sort:{timestamp:1}
        Aggregates.sort(Sorts.ascending("timestamp")),

        // $limit:1
        Aggregates.limit(1),

        // $unwind:"$auditErrorTypeCounts"
        Aggregates.unwind("$auditErrorTypeCounts"),

        // $unwind:"$auditErrorTypeCounts.auditErrorCounts"
        Aggregates.unwind("$auditErrorTypeCounts.auditErrorCounts"),

        // $group:{...}
        Aggregates.group(
                // _id:{"agent":"$auditErrorTypeCounts.auditErrorCounts.agentName","type":"$auditErrorTypeCounts.typeOfError"}
                new Document("agent", "$auditErrorTypeCounts.auditErrorCounts.agentName").append("type", "$auditErrorTypeCounts.typeOfError"),

                // count:{$sum:"$auditErrorTypeCounts.auditErrorCounts.countOfErrors"}}}
                Accumulators.sum("count", "$auditErrorTypeCounts.auditErrorCounts.countOfErrors")
        )
));

聚合管道中每个阶段的注释显示了Java代码镜像的shell命令。例如:

// $unwind:"$auditErrorTypeCounts.auditErrorCounts"
Aggregates.unwind("$auditErrorTypeCounts.auditErrorCounts")

...向您显示与shell命令$unwind:"$auditErrorTypeCounts.auditErrorCounts"等效的Java是Aggregates.unwind("$auditErrorTypeCounts.auditErrorCounts")。这可以使您更容易将一个映射到另一个。

MongoDB Java driver docs

中的更多详细信息