Есть модель вида
const BookSchema = new Schema({
title: {
type: String
},
lists: [
{
type: Schema.Types.ObjectId,
ref: 'lists'
}
]
})
В свою очередь модель указанного ref выглядит так:
const ListSchema = new Schema({
title: {
type: String
},
sublists: [
{
title: {
type: String,
required: false
},
contents: [
{
book: {
type: Schema.Types.ObjectId,
ref: 'book',
required: false
},
comment: {
type: String
required: false
}
}
]
}
]
})
Т.е. если получить документ, к которому прикреплены эти рефовые списки, то получится такая структура
{
title: 'Collection title',
lists: [
{
title: 'List title',
sublists: [
{
title: 'Sublist title 1',
contents: [
{
book: '610870e5a5f74d036c37041d',
comment: 'Some comment 1-1'
},
{
book: '610870e5a5f74d036c37041g',
comment: 'Some comment 1-2'
}
]
}
]
}
]
}
Как мне получить посредством populate (или, может, еще как-то) не только список, с которым связан первый документ, но и title с _id его подсписка, т.е. найти документ внутри lists > sublists > contents и вернуть, например, что-то вроде
{
title: 'Document title',
lists: [
{
title: 'List title',
sublists: [
{
title: 'Sublist title'
}
]
}
]
}
Т.е. отфильтровать и вернуть списки и подсписки, в которых искомый документ встречается.
При этом искомый документ может находиться в нескольких списках и подсписках.
Пробовал делать так:
const book = await Book.findById(id)
.populate({ path: 'lists', select: ['title', '_id'], match: {sublists: {contents: {book: {$eq: id}}}} })
Но возвращается ошибка
message: "Cast to ObjectId failed for value \"{ '$eq': '610870e5a5f74d036c37041d' }\" (type Object) at path \"book\" because of \"BSONTypeError\""
Как правильно сделать то, что требуется?