【发布时间】:2021-01-25 11:11:42
【问题描述】:
我有一个像这样的简单聚合查找查询:
cursor = db.my_db['shop'].aggregate([
{
'$lookup':
{
'from': 'customer',
'localField': 'in_shop',
'foreignField': '_id',
'as': 'joined_customers'
}
}
])
请注意,此查询使用另一个集合 customer 它的 from 子句。
此查询对实际的 mongo db 非常有效,但不适用于我的 mongomock.MognoClient 对象。
要让它与 mongomock 一起工作,我需要将数据库前缀添加到查询中,如下所示:
cursor = db.my_db['shop'].aggregate([
{
'$lookup':
{
'from': 'my_db.customer',
'localField': 'in_shop',
'foreignField': '_id',
'as': 'joined_customers'
}
}
])
但是,如果我这样做,则此查询不再适用于实际的 mongo DB。 这里出了什么问题?我无法创建适用于模拟和实际数据库的代码。
如果我不包含数据库名称,则模拟不会找到其他集合来加入它。需要明确的是,这两个查询在各自的“系统”上都可以正常工作,并且两个集合都可以在自己的模拟中查询。如果 from 子句不包含数据库名称前缀,则仅查找 customer 集合在 mongomock 中无法正常工作。
【问题讨论】: