Как группировать по _id с использованием агрегата - PullRequest
0 голосов
/ 28 ноября 2018

Имея следующий код:

Aggregation aggregation = newAggregation(Foo.class,
                                         limit(10),
                                         group("_id")).withOptions(new AggregationOptions.Builder().allowDiskUse(true).build());

AggregationResults aggregate = mongoOps.aggregate(aggregation,
                                                  "Foo",
                                                  ObjectId.class);
List<ObjectId> idsToDelete = new ArrayList<>(aggregate.getMappedResults());

Я ожидал, что это будет работать как есть.На самом деле выдает:

org.springframework.data.mapping.model.MappingException: No mapping metadata found for org.bson.types.ObjectId

Что я тут не так делаю?Чтобы заставить его работать, единственный способ, который я нашел, - это заменить ObjectId в моем агрегате следующим классом:

public class ObjectIdHolder {
    private ObjectId _id;

    private ObjectId getId() {
        return _id;
    }
}

Но я бы предпочел, чтобы он работал без него, поскольку он больше шума, чем все остальное.

Я попробовал точно такой же код на другой коллекции Bar, где _id - это не ObjectId, а пользовательский объект BarId, и он работает как шарм.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...