如何在收到结果后在另一个集合中搜索其他文档?
例如,我有一个名为Posts
的大集合和另一个名为Users
的大集合。
每个用户都可以创建多个帖子,而其他用户只有与他们成为朋友或跟随他们才能查看这些帖子。以下是User
:
{
_id: 1234,
name: "Jack",
username: 'jack',
friends: [9439, 4957, 2847]
followers: [9111, 5746, 6576],
following: [2121, 4382]
}
以下是Post
:
{
_id: 2948,
text: "Hello World",
postedBy: 4957
}
由于以上是postedBy
用户4957
,而上述示例用户Jack
是用户4957
的朋友,他应该收到此帖子。
由于MongoDB的新用途,我不确定如何处理这个问题,尽管我认为可能需要汇总管道。我猜它需要搜索帖子,获取postedBy
,检查它是否存在于登录用户friends
或following
数组中,然后继续查看下一篇文章。我每次请求只会返回20个帖子的限制。
我无法使用嵌入式文档,因为两种模型都可以随时更改。
答案 0 :(得分:0)
尝试此查询,如果要在mongodb中使用查询从一个集合到另一个集合,请使用$ lookup
此查询返回与朋友发布的用户集合
db.getCollection('user').aggregate([
{
$unwind: "$friends"
},
{
$lookup:
{
from: "post",
localField: "friends",
foreignField: "postedBy",
as: "friendsPost"
}
},
{
$match: { "friendsPost": { $ne: [] } }
}
])
此查询返回此输出
{
"waitedMS" : NumberLong(0),
"result" : [
{
"_id" : 1234,
"name" : "Jack",
"username" : "jack",
"friends" : 4957,
"followers" : [9111,5746,6576],
"following" : [2121, 4382],
"friendsPost" : [
{
"_id" : 2948,
"text" : "Hello World",
"postedBy" : 4957
}
]
}
],
"ok" : 1.0000000000000000
}