2013-02-10 81 views
-2

這裏是我的架構:我怎樣才能在mongodb文件上做很多操作?

"_id" : "[email protected]" 

"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 

但當我將操作分成三部分時,它可以工作,

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

但isent危險?

回答

3

您可以通過多個運營商提供更新的document論點dict

yield tornado.gen.Task(db.users.update, {"_id":email}, {"$set":{"prs.pass":password}, "$inc":{"modif":1}, "$pop":{"reset":1}}) 
+0

對不起,忘了加上字典:) 再次感謝你 – 2013-02-11 09:47:38