Преобразовать агрегат Монго (с группой и размером) в запрос к весенним данным - PullRequest
0 голосов
/ 21 ноября 2018

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();

    }
...