Mongo批量过滤并添加连接字段



我有一个Mongo集合,我正在尝试更新(在PyMongo中(。我有像{'state': 'ny', 'city': 'nyc', 'race': 'b', 'ethnicity': 'h'}这样的文档,我正试图通过匹配某些条件来对这些文档进行批量操作,并创建了一个串联的"race_ethnicity"字段。

一个伪示例可能是:

filter = {
'state': 'ny',
'city': 'nyc',
'race': {"$exists": True},
'ethnicity': {"$exists": True},
'race_ethnicity': {"$exists": False}
}
action = {'$addFields': {'race_ethnicity': {'$concat': ['$race', '$ethnicity']}}}))

使用上述文件,更新后的文件将为:{'state': 'ny', 'city': 'nyc', 'race': 'b', 'ethnicity': 'h', 'race_ethnicity': 'bh'}

我想批量匹配,并批量更新这样的集合——如何在不得到BulkWriteError的情况下进行此操作?

***我尝试过的:

updates = []
updates.append(UpdateMany({
'state': 'ny',
'city': 'nyc',
"race": {"$exists": True},
"ethnicity": {"$exists": True},
"race_ethnicity": {"$exists": False}
},
{'$addFields': {'race_ethnicity': {'$concat': ['$race', '$ethnicity']}}}))
self.db.bulk_write(updates) 

这产生了以下错误:

pymongo.errors.BulkWriteError: batch op errors occurred
  • 根据bulkWrite((语法,您的批量写入负载不正确
  • $addFields是一个聚合管道阶段,你不能在常规更新查询中使用,所以为了解决这个问题,你可以从MongoDB 4.2开始使用聚合管道更新
updates = []
updates.append({
'updateMany': {
'filter': {
'state': 'ny',
'city': 'nyc',
'race': { '$exists': True},
'ethnicity': { '$exists': True},
'race_ethnicity': { '$exists': False}
},
'update': [
{
'$set': { 'race_ethnicity': { '$concat': ['$race', '$ethnicity'] } }
}
]
}
})
self.db.bulk_write(updates)

游乐场

相关内容

  • 没有找到相关文章