我遇到了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类,但它没有用。
答案 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")
。这可以使您更容易将一个映射到另一个。