您知道mongodb中没有联接,所以我像这样执行喜欢联接查询。
users = user_collection.find({"region": "US", `and some condition here`}, projection={"user_id": 1"})
user_list = [
user['user_id']
for user in users
]
posts = post_collection.find({"user_id": {"$in": user_list}, `and some condition here`)
(为避免带来不必要的字段,在projection
中也使用了find()
选项)
集合和列表大小
用户= 2000000
user_list = 100000
帖子= 2000000
执行查询时,大约需要4秒钟。
其中,使user_list
花费将近3秒钟。
问题
user_id
的结果?谢谢。
答案 0 :(得分:1)
首先,请确保您查询的字段已正确索引。如果已经完成,您可以尝试以下方法:
您可以使用distinct
在一个查询中获取user_list
:
类似这样:
user_list = user_collection.distinct("user_id", {"region": "US", ...})
第二个选项是通过执行user_collection
中的$lookup来检索单个查询中的帖子:
user_collection.aggregate([
{
"$match": {"region": "US", ...}
},
{
"$lookup": {
"from": "post_collection",
"localField": "user_id",
"foreignField": "user_id",
"as": "post"
}
},
...
])