если у меня есть коллекция книг: -
{author: "tolstoy", title:"war & peace", price:100, pages:800}
{author: "tolstoy", title:"Ivan Ilyich", price:50, pages:100}
и если я хочу получить такой результат после их группировки по автору: -
{ author: "tolstoy",
books: [
{author: "tolstoy", title:"war & peace", price:100, pages:800}
{author: "tolstoy", title:"Ivan Ilyich", price:50, pages:100}
]
}
используя сырые запросы mongo, я могу сделать что-то вроде этого: -
{$group: {
_id: "$author",
books:{$push: {author:"$author", title:"$title", price:"$price", pages:"$pages"}},
}}
Но как мне это сделать с помощью Spring, я пробовал что-то вроде этого: -
private GroupOperation getGroupOperation() {
return group("author").push("title").as("title").push("price").as("price").push("pages").as("pages");
}
but this does not seem to work. Any help would be appreciated.
ОБНОВЛЕНИЕ: - Я использовал решение, как в ссылке, предложенной @Veeram, и оно отлично работает, но я столкнулся с другой проблемой, когда проецирую его. У меня есть класс проекции, который выглядит так: -
public class BookSummary{
private String author;
private List<Book> bookList;
//all getters and setters below
}
Групповой метод выглядит так: -
private GroupOperation getGroupOperation() {
return group("author").push(new BasicDBObject("id","$_id").append("title","$title").append("pages","$pages").append("price","$price")).as("bookList");
}
метод проецирования выглядит так: -
private ProjectionOperation getProjectOperation() {
return project("author").and("bookList").as("bookList");
}
и последняя операция агрегирования: -
mongoTemplate.aggregate(Aggregation.newAggregation(groupOperation,projectionOperation), Book.class, BookSummary.class).getMappedResults();
Однако это дает результат: -
[
{
"author": null,
"bookList": [
{
"id": null,
"title": "title1",
"pages": "100",
"price":"some price"
},
{
"id": null,
"title": "title2",
"pages": "200",
"price":"some price"
}
]
}
]
Почему автор и идентификатор здесь равны нулю? Любая помощь будет оценена
project("bookList").and("author", "_id")
- person s7vr   schedule 04.01.2018