我有一个Model
,其结构类似于此:
{
"_id": ObjectId("5c878c5c18a4ff001b981zh5"),
"books": [
ObjectId("5d963a7544ec1b122ab2ddc"),
ObjectId("5d963be01f663d168f8ea4dc"),
ObjectId("5d963bcb1f663d168f8ea2f4"),
ObjectId("5d963bdf1f663d16858ea7c9"),
}
现在,我想使用聚合框架来获取仅填充书籍的列表,例如:
{ _id: ObjectId("5d963a7544ec1b122ab2ddc"), title: ...., ... },
..
答案 0 :(得分:0)
.aggregate([
{
$lookup: {
from: 'books',
let: { books: '$books' },
pipeline: [{ $match: { $expr: { _id: { $in: ['_id', '$$books'] } } } }],
as: 'bookInfos'
}
},
{ $unwind: '$bookInfos' },
{ $replaceRoot: { newRoot: '$bookInfos' } }
])
对于您的问题我不太确定,但是我认为这可能是您要寻找的。 p>
答案 1 :(得分:0)
因此此查询对我有用:
{
$match: {
_id: user._id,
},
},
{
$lookup: {
from: "books",
localField: "books",
foreignField: "_id",
as: "booksInfo",
},
},
{ $unwind: "$booksInfo" },
{
$replaceRoot: {
newRoot: "$booksInfo",
},
},
感谢@zishone。您的查询以某种方式返回了数据库中所有可用的书籍,不仅返回了用户模型中的书籍,而且在查找带有local和foreignField的文档时可以按需运行。