问题:调用blukwrite updateone报错:
error: not authorized on db_amiya to execute command { update: "operations", updates: 1000, ordered: false, bypassDocumentValidation: true, lsid: { id: UUID("30a733a4-6bae-48be-8d7f-412ec1143c15") }, $db: "db_amiya" }
解决:
1、本地调用shell blukwrite
db.getCollection('operations').bulkWrite(
[
{
updateOne: {
filter: { createrName: 'Adminx' },
update: { $set: {descAfter: 'aaax1'} },
upsert: false
}
},
{
updateOne: {
filter: { createrName: 'Adminy' },
update: { $set: {descAfter: 'aaay2'} },
upsert: false
}
}
],
{ order: false}
);
2、本地demo复现报错
requests = [
InsertOne({ "user_name":"user0003"}),
UpdateOne({ "user_name":"user0003"},{"$set":{"user_name": "000000000"}})
]
result = mycollection.bulk_write(requests,ordered=True,bypass_document_validation=True)
########报错
pymongo.errors.OperationFailure: not authorized on test to execute command { insert: "log", ordered: true, bypassDocumentValidation: true, lsid: { id: UUID("eaff0502-c60c-4d96-b31e-ab4ecb62c8e8") }, $db: "test" }, full error: {'ok': 0.0, 'errmsg': 'not authorized on test to execute command { insert: "log", ordered: true, bypassDocumentValidation: true, lsid: { id: UUID("eaff0502-c60c-4d96-b31e-ab4ecb62c8e8") }, $db: "test" }', 'code': 13, 'codeName': 'Unauthorized'}
原因解释:bypass_document_validation=True
Mongodb3.2提供了在插入和更新时验证文档的功能。每个集合都是基于使用validator
选项来指定验证规则的。该验证器选项是给文档指定验证规则或表达式,在操作文档是必须满足验证器规则才能成功。
由于代码指定bypass_document_validation=True需要dbAdmin和restore这两个角色权限;