我正在尝试对我的两个集合应用 $lookup
聚合,但它每次都返回一个空数组。我已经检查了本地和外国字段的数据类型,它们是相同的。我正在使用 pymongo
库在 Python
程序中实现它。
这是 paid
集合的架构:
{
"_id":{"$oid":"60aba58c5eff5afbc6e7c9f3"},
"created":{"$date":{"$numberLong":"1621861772297"}},
"questionId: {"$oid":"60aba53d485bfcf514e0bc1d"},
"userId":"gctqXxSIrAe8O8HidhOhxzYIDjR2"
}
这是 question
集合的架构:
{
"_id":{"$oid":"60ab8e0c485bfcf514e0bc18"},
"created":{"$date":{"$numberLong":"1621855756763"}},
"clientId":"ksCBoGLIr7MPNcod2FqXNPNcgZj2",
"topic":"Engineering"
}
现在我想使用 questionId
集合的 paid
和 _id
集合的 question
加入这些集合,然后我可以按 userId
和 {{1 }} 并获取每个 userId 关注的每个主题的问题数
我以下列方式使用 topic
:
$lookup
这将返回一个空数组。我正在从 MongoDB Atlas 获取集合。
请有人帮助我,因为我对 Mongo 还很陌生,并且是第一次使用这些聚合函数。
答案 0 :(得分:0)
这件事终于得到了解决。
我使用 collection1 = db['question]
和 collection2 = db['paid']
从 MongoDB Atlas 获取集合,然后使用查找为:
pipeline = [{
'$lookup':
{
'from': 'collection1',
'localField': 'questionId',
'foreignField': '_id',
'as': 'output'
}
}]
records = list(collection2.aggregate(pipeline))
但是,我们必须在 from
子句中使用原始集合名称,而不是我们在从 Atlas 获取数据到 Python 后给出的名称。所以代码会变成:
pipeline = [{
'$lookup':
{
'from': 'question',
'localField': 'questionId',
'foreignField': '_id',
'as': 'output'
}
}]
records = list(collection2.aggregate(pipeline))
希望这能帮助那些在使用 Pymongo 和 MongoDB Atlas 时犯同样错误的人