想象一下,我们有两个集合:一个topics
和一个posts
。我们有user._id
:
topic {
_id, // topicID
userId
}
post {
topicId
}
user {
_id
}
MongoDB如何通过特定posts
获取所有user
(而不在[{1}} 中存储userId
)?
post
答案 0 :(得分:1)
您可以使用 $lookup
运算符在未加密的topic
集合上进行左连接,然后使用 $match
过滤生成的文档管道。您可能需要使用topics数组上的 $filter
运算符,以仅包含与给定用户ID条件匹配的子文档。以下演示了这种方法:
db.post.aggregate([
{
"$lookup": {
"from": "topic",
"localField": "topicId",
"foreignField": "_id",
"as": "topics"
}
},
{ "$match": { "topics.userId": user._id } },
{
"$project": {
"topics": {
"$filter": {
"input": "$topics",
"as": "item",
"cond": { "$eq": [ "$$item.userId", user._id ] }
}
}
}
}
])