有没有办法在单个pymongo update_one语句中进行多个$ push操作?

时间:2015-12-10 10:09:36

标签: python mongodb pymongo

我试图在一个mongo doc中同时更新两个数组(在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 个答案:

答案 0 :(得分: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" } }