如何在mongodb中使用$ lookup $ let变量?

时间:2019-06-09 19:13:02

标签: mongodb mongoose aggregation-framework lookup

尝试执行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 个答案:

答案 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"
}},