2015-12-10 78 views
0

我想同時更新單個mongo文檔中的兩個數組(在python shell中)。當我運行下面的代碼時,它似乎工作正常,直到我看到只有兩個數組中的第二個已被更改。我嘗試過使用類似的代碼,我已經使用$ set和$ push同時進行了更新,這看起來很好,但是沒有在單個update_one語句中使用$ push操作符兩次。

>>> mongo = MongoClient() 
>>> result = mongo.db.stuff.insert_one({'a':[], 'b':[]}) 
>>> result.inserted_id 
ObjectId('56694d602fdf6a293fef8ebd') 
>>> mongo.db.stuff.update_one({'_id':ObjectId('56694d602fdf6a293fef8ebd')}, {'$push': {'a':'1'}, '$push': {'b':'2'}}) 
<pymongo.results.UpdateResult object at 0x105aac460> 
>>> mongo.db.stuff.find_one({'_id':ObjectId('56694d602fdf6a293fef8ebd')}) 
{u'a': [], u'_id': ObjectId('56694d602fdf6a293fef8ebd'), u'b': [u'2']} 

任何想法可能會發生在這裏以及如何使它工作?

回答

1

更改以下行

mongo.db.stuff.update_one({'_id':ObjectId('56694d602fdf6a293fef8ebd')}, {'$push': {'a':'1'}, '$push': {'b':'2'}}) 

mongo.db.stuff.update_one({'_id':ObjectId('56694d602fdf6a293fef8ebd')}, {'$push': {'a':'1','b':'2'}}) 

您的代碼沒有工作,因爲它不是,你是通過一個實際的JSON。 {'$push': {'a':'1'}, '$push': {'b':'2'}}將評估爲{'$push': {'b':'2'}},因爲您不能在同一級別的json中擁有兩個同名的密鑰。這可以在mongo控制檯中輕鬆模擬。

> var a = {'$push': {'a':'1'}, '$push': {'b':'2'}} 
> a 
{ "$push" : { "b" : "2" } } 
相關問題