如何在 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 变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 mongodb 中应用 $lookup 条件?

如何在 Node.js 中高效/快速地执行数组连接,类似于 MongoDB $lookup?

如何使用 MongoDB 聚合 `$lookup` 作为 `findOne()`

如何在 mongodb 中使用 $lookup 从该表中获取与另一个表连接的数据

如何在 mongoDB 的第二级实现`lookup`? [复制]

如何在 mongoDB 的第二级实现`lookup`? [复制]