【发布时间】:2021-03-17 06:59:17
【问题描述】:
我在从 mongo > documentDB 迁移后尝试使用 substr 执行更新,但是我遇到了一个奇怪的错误。
以下使用 pymongo 在 Mongo 4.0 上工作:
await db[cls.colname].update_many(
{'$or': [{'preview_title': {'$exists': False}}, {'preview_title': None}]},
[{'$set': {'preview_title': {'$substr': ['$title', 0, 70]}}}],
)
等效的 mongo shell 命令也可以:
db.getCollection('pages').updateMany({'$or': [{'preview_title': {'$exists': false}}, {'preview_title': null}]}, [{'$set': {'preview_title': {'$substrBytes': ['$title', 0, 70]}}}])
但是,切换到 AWS DocumentDB 后,它不接受以数组形式进行的更新,否则将返回此错误:“MongoError: Wrong type for parameter u” image
如果我将命令更改为以下,它将起作用(基本上只是从更新部分中删除方括号):
db.getCollection('pages').updateMany({'$or': [{'preview_title': {'$exists': false}}, {'preview_title': null}]}, {'$set': {'preview_title': {'$substr': ['$title', 0, 70]}}})
这很好,但是,等效的 pymongo 调用似乎不起作用:
await db[cls.colname].update_many(
{'$or': [{'preview_title': {'$exists': False}}, {'preview_title': None}]},
{'$set': {'preview_title': {'$substr': ['$title', 0, 70]}}},
)
它返回以下错误: pymongo.errors.WriteError:文档不能有 $ 前缀字段名称:$substr
【问题讨论】:
标签: python mongodb pymongo aws-documentdb