在 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
集合的 questionId
和 question
集合的 _id
加入这些,这样我就可以按 userId
和 topic
并获取每个 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
时犯同样错误的人
我正在尝试对我的两个集合应用 $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
集合的 questionId
和 question
集合的 _id
加入这些,这样我就可以按 userId
和 topic
并获取每个 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
时犯同样错误的人