【问题标题】:How to use $lookup $let variables in mongodb?如何在 mongodb 中使用 $lookup $let 变量?
【发布时间】: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"
    }},

【问题讨论】:

    标签: mongodb mongoose aggregation-framework lookup


    【解决方案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 来评估事情......非常混乱和冗长......
    猜你喜欢
    • 2020-07-12
    • 2019-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 2018-07-04
    • 1970-01-01
    相关资源
    最近更新 更多