有没有办法在单个 pymongo update_one 语句中进行多个 $push 操作?
Is there a way to make multiple $push operations in a single pymongo update_one statement?
我正在尝试同时更新单个 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']}
关于这里可能发生的事情以及如何让它发挥作用的任何想法?
更改以下行
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" } }
我正在尝试同时更新单个 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']}
关于这里可能发生的事情以及如何让它发挥作用的任何想法?
更改以下行
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" } }