我试图在一个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']}
关于这里可能发生什么以及如何使其发挥作用的任何想法?
答案 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" } }