#mongodb #aggregation-framework
Вопрос:
У меня есть три коллекции, для целей этой иллюстрации, пожалуйста, следуйте за мной с этой немного проблематичной метафорой книжного магазина!
3 Коллекции; Книги, Страницы и Категории. В книгах много Страниц, и каждая Страница классифицируется в соответствии с ее содержанием.
var page = mongoose.Schema({
book : { type: Schema.Types.ObjectId, ref: 'Book' },
category : { type: Schema.Types.ObjectId, ref: 'Category' },
content : { type: String }
});
var book = mongoose.Schema({
pages : [{ type: Schema.Types.ObjectId, ref: 'Author' }],
pageCount : { type: Number },
title : { type: String },
});
var category = mongoose.Schema({
title : String,
color : String,
sortOrder : Number
});
Учитывая идентификатор книги, я хотел бы просмотреть ее страницы и вернуть их в массив соответствующих категорий, чтобы в результате получить что-то подобное…
{
categories: [
{
title: "Diagrammatical",
color: "Red",
sortOrder: 1,
pages: [
{
_id: ObjectId("a3j3n2i"),
book: ObjectId("12345"),
content: "Page Content Here"
},
{
_id: ObjectId("30gjkdi2g"),
book: ObjectId("67890"),
content: "Other Page Content Here"
}
]
},
{
title: "Prose",
color: "Green",
sortOrder: 2,
pages: [
{
_id: ObjectId("abcdefg"),
book: ObjectID("12345"),
content: "Page Content Here"
},
{
_id: ObjectId("hijklmn"),
book: ObjectId("67890"),
content: "Other Page Content Here"
}
]
}
]
}
В моем случае использования не имеет смысла делать страницы свойством коллекции категорий, но было бы так полезно иметь возможность захватывать категории для конкретной книги с вложенными в них страницами. есть ли способ выполнить такого рода манипуляции с использованием агрегации и популяции?