-2

ここに私のスキーマがあります:

"_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

しかし、操作を3つに分割すると機能し、

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}})

私はこれを見つけましが、非同期呼び出しでは同じではないと思いました。これは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}})]

でも危ない?

4

1 に答える 1

3

dict提供された複数の演算子documentを update の引数に渡すことができます。

yield tornado.gen.Task(db.users.update, {"_id":email}, {"$set":{"prs.pass":password}, "$inc":{"modif":1}, "$pop":{"reset":1}})
于 2013-02-11T00:37:58.847 に答える