如何在 mongodb 中使用 $lookup $let 变量?
Posted
技术标签:
【中文标题】如何在 mongodb 中使用 $lookup $let 变量?【英文标题】:How to use $lookup $let variables in mongodb? 【发布时间】:2019-10-24 08:07:03 【问题描述】:尝试执行 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"
,
【问题讨论】:
【参考方案1】:您只能使用mongoose.Types.ObjectId
转换req.user._id
,因为它成为聚合框架的常量值。要转换变量$$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"
,
【讨论】:
谢谢,该解决方案似乎有效。似乎我也错过了 $expr 只能有一个参数,所以你必须使用 $and 来评估事情......非常混乱和冗长......以上是关于如何在 mongodb 中使用 $lookup $let 变量?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Node.js 中高效/快速地执行数组连接,类似于 MongoDB $lookup?
如何使用 MongoDB 聚合 `$lookup` 作为 `findOne()`
如何在 mongodb 中使用 $lookup 从该表中获取与另一个表连接的数据