我想出了一个 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
,但我从未使用过它,而且我对这个过程很迷茫。
答案 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" }
])