将此 SQL 查询转换为 Mongodb 查询

时间:2021-04-03 19:40:38

标签: mongodb join mongodb-query

我想出了一个 SQL 查询,因为我更熟悉它,但我需要帮助将此查询转换为 Mongodb 查询。

所以,我有 4 个集合:

Post


{
    title: String,
    content: String,
    sub_id: String,
}

User


{
    user_id: String,
    user_name: String,
}

Sub


{
    sub_id: String,
    sub_name: String,
}

Follow


{
    sub_id: String,
    user_id: String,
}

这个想法是检索来自用户关注的订阅者的所有帖子。

这里是似乎符合这个想法的 SQL 查询:

SELECT Post.* 
FROM Post
JOIN Subs ON Post.sub_id = Subs.sub_id
JOIN Follow ON Post.sub_id = Follow.sub_id
JOIN User ON Follow.user_id = User.user_id
WHERE User.user_id = "user id here"

我可能应该使用聚合 $lookup,但我从未使用过它,而且我对这个过程很迷茫。

1 个答案:

答案 0 :(得分:1)

试试这个:

let userId = "user1";

db.Post.aggregate([
    {
        $lookup: {
            from: "Sub",
            localField: "sub_id",
            foreignField: "sub_id",
            as: "Sub"
        }
    },
    { $unwind: "$Sub" },
    {
        $lookup: {
            from: "Follow",
            localField: "sub_id",
            foreignField: "sub_id",
            as: "Follow"
        }
    },
    { $unwind: "$Follow" },
    {
        $lookup: {
            from: "User",
            let: { user_id: "$Follow.user_id" },
            pipeline: [
                {
                    $match: {
                        user_id: userId,
                        $expr: { $eq: ["$user_id", "$$user_id"] }
                    }
                }
            ],
            as: "User"
        }
    },
    { $unwind: "$User" }
])