sin my MongoDB У меня есть такие документы:
{
"_id" : ObjectId("5bf3cd1c6b86db2c84d"),
"_class" : "Log",
"data" : {
"devices" : [
{
"id": "12364",
"name":"name"
},
{
"id": "12346",
"name":"name"
},
{
"id": "12345",
"name":"name"
}
]
}
}
Я хотел вернуть количество устройств, поэтому я создал запрос:
db.getCollection('coll').aggregate(
{$group: { _id: null, totalSize: { $sum: { $size: "$data.devices"}} }})
, который возвращает мне:
{ "_id" : null, "totalSize" : 6 }
Но как создать метод для возврата «totalSize» в Spring Data?
Я застрял и не знаю, как решить эту проблему:
public Long countDevices() {
GroupOperation groupOperation= Aggregation.group("_id").sum("_id");
Aggregation aggregation = Aggregation.newAggregation(groupOperation);
mongoOperations.aggregate(matchOperation,)
return ...
}
Похоже, решение нижеработать, но это не выглядит так красиво и производительность:
public Long count(Criteria searchCriteria) {
Aggregation aggregation = Aggregation.newAggregation(
Aggregation.match(searchCriteria),
Aggregation.unwind("data.device")
);
AggregationResults aggregationResults = mongoOperations.aggregate(aggregation,"coll", DBObject.class);
return (long) aggregationResults.getMappedResults().size();
}