尝试执行lookup并使用其中一个变量,但使用$ expr会造成混淆。
我很确定let部分是正确的,但是它说要在管道中使用它,您需要一个$ expr,但是我不知道在哪里或提供什么信息。
这是我到目前为止所拥有的:
{"$lookup": {
"from": "likes",
"let": {'content': "$_id"},
"pipeline": [{'$match': { '$expr':
{user: mongoose.Types.ObjectId(req.user._id), content: mongoose.Types.ObjectId("$$content")}
}}],
"as": "liked"
}},
答案 0 :(得分:1)
您只能使用req.user._id
来转换mongoose.Types.ObjectId
,因为它成为Aggregation Framework的常量值。要转换变量$$content
,您必须使用$toObjectId运算符。
{"$lookup": {
"from": "likes",
"let": {'content': "$_id" },
"pipeline": [
{'$match': { $expr: { $and: [
{ $eq: [ "$user", mongoose.Types.ObjectId(req.user._id) ] },
{ $eq: [ "$content", { $toObjectId: "$$content" } ] },
] } } }
],
"as": "liked"
}},