我有一个简单的聚合查找查询,如下所示:
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。这里出了什么问题?我无法创建适用于模拟和实际数据库的代码。
如果我不包含数据库名称,则模拟不会找到其他集合来加入它。需要明确的是,这两个查询在各自的“系统”上都可以正常工作,并且两个集合都可以在自己的模拟中查询。如果子句不包含数据库名称前缀,则仅在 mongomock中查找customer
集合就无法正常工作。from