在 MongoDB 聚合管道 $lookup 中返回空数组

In MongoDB aggregation pipeline $lookup returning empty array

我正在尝试对我的两个集合应用 $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"
}

现在我想使用 paid 集合的 questionIdquestion 集合的 _id 加入这些,这样我就可以按 userIdtopic 并获取每个 userId 关注的每个主题的问题数

我按以下方式使用 $lookup

 pipeline = [{
       '$lookup':
         {
           'from': 'coll',
           'localField': 'questionId',
           'foreignField': '_id',
           'as': 'output'
         }
 }]

records = list(paid.aggregate(pipeline))

这将返回一个空数组。我正在从 MongoDB Atlas 获取集合。
请有人帮助我,因为我是 Mongo 的新手并且是第一次使用这些聚合函数。

这东西终于修好了。
我使用 collection1 = db['question]collection2 = db['paid'] 从 MongoDB Atlas 中获取集合,然后使用 lookup as:

 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

时犯同样错误的人