这是我的架构:
"_id" : "tofla@darhoum.dz"
"modif" : 1
"prs" :
{
"pass" : "sdfdsf"
}
"reset" :
[
{
"code" : "1680"
"timr" : "AQQOAAMGCQMcBgodAAYYAgIMDAkLBAEeAAcNAAEG"
}
]
我想执行大量操作在相同的代码行中
yield tornado.gen.Task(db.users.update, {"_id":email}, {"$set":{"prs.pass":password}}, {"$inc":{"modif":1}}, {"$pop":{"reset":1}})
我收到了这个错误:
assert isinstance(upsert, bool), "upsert must be an instance of bool"
AssertionError: upsert must be an instance of bool
但是当我将操作拆分为THREE时,它可以工作,
yield tornado.gen.Task(db.users.update, {"_id":email}, {"$set":{"prs.pass":password}})
yield tornado.gen.Task(db.users.update, {"_id":email}, {"$pop":{"reset":1}})
yield tornado.gen.Task(db.users.update, {"_id":email}, {"$inc":{"modif":1}})
我找到了this,但认为在异步调用中它不是同一个东西,这个mongodb会锁定吗?
更新:试过这个并且工作:
yield [tornado.gen.Task(db.users.update, {"_id":email}, {"$set":{"prs.pass":password}}),
tornado.gen.Task(db.users.update, {"_id": email}, {"$pop":{"reset":1}}),
tornado.gen.Task(db.users.update, {"_id":email}, {"$inc":{"modif":1}})]
但是危险吗?
答案 0 :(得分:3)
您可以将提供的dict
中的多个运算符传递给更新的document
参数:
yield tornado.gen.Task(db.users.update, {"_id":email}, {"$set":{"prs.pass":password}, "$inc":{"modif":1}, "$pop":{"reset":1}})