Допустим, у меня есть эти две коллекции
book: {
_id: 'aaa'
name: 'Book 1',
chapters: [
0: {
_id: 'chapter0',
name: 'Chapter 1',
pages: [
0: {
_id: 'page0',
name: 'Page 1',
paragraphs: [
0: {
_id: 'paragraph0',
name: 'Paragraph 1',
bookmarks: [
0: {sentence: 3, reader: 'Foo'},
1: {sentence: 8, reader: 'Bar'},
2: {sentence: 14, reader: 'John'}
]
}
]
}
]
}
]
}
book: {
_id: 'bbb'
name: 'Book 2',
chapters: [
0: {
_id: 'chapter0',
name: 'Chapter 1',
pages: [
0: {
_id: 'page0',
name: 'Page 1',
paragraphs: [
0: {
_id: 'paragraph0',
name: 'Paragraph 1',
bookmarks: []
},
1: {
_id: 'paragraph1',
name: 'Paragraph 2',
bookmarks: [
0: {sentence: 2, reader: 'George'},
1: {sentence: 1, reader: 'Paul'},
2: {sentence: 76, reader: 'John'},
3: {sentence: 54, reader: 'Ringo'}
]
}
]
}
]
}
]
}
Я хочу иметь возможность извлечь массив bookmarks
и присоединить их к коллекции book
при получении результата.Что-то вроде этого было бы хорошо:
{
id: 'aaa'
name: 'Book 1'
bookmarks: [{...}, {...}, {...}] //since the first book has 3 bookmarks
},
{
id: 'bbb'
name: 'Book 2'
bookmarks: [{...}, {...}, {...}, {...}] //since the second book has 4 bookmarks
},
И если нет закладок, это должно выглядеть так:
{
id: 'aaa'
name: 'Book 1'
bookmarks: [{...}, {...}, {...}] //since the first book has 3 bookmarks
},
{
id: 'bbb'
name: 'Book 2'
bookmarks: [{...}, {...}, {...}, {...}] //since the second book has 4 bookmarks
},
{
id: 'ccc'
name: 'Book 3'
bookmarks: [] //third book does not have bookmarks for example
},
Я пробовал агрегацию с этим кодом, но он просто разделяеткаждая закладка на книгу и толкает ее в объект.
return yield Books.aggregate()
.unwind('chapters')
.unwind('chapters.pages')
.unwind('chapters.pages.paragraphs')
.unwind('chapters.pages.paragraphs.bookmarks')
.group({
_id: '$_id',
books: {
$push: {
_id: '$_id',
name: '$name',
bookmarks: '$chapters.pages.paragraphs.bookmarks'
}
}
}).exec()
Может ли кто-нибудь указать мне правильное направление?Спасибо!