我正在尝试对嵌套值进行条件更新。基本上每个数组项的2个变量的嵌套数组中的一个变量有一个我希望根据另一个变量的字符串值更新的布尔组件。
我还希望基于有针对性的查找查询来完成所有这些工作。我在下面想出了这个,但它不起作用。
#!/usr/bin/env python
import ssl
from pymongo import MongoClient
client = MongoClient("somehost", ssl=True, ssl_cert_reqs=ssl.CERT_NONE, replicaSet='rs0')
db = client.maestro
mycollection = db.users
print 'connected, now performing update'
mycollection.find_and_modify(query={'emailAddress':'somedude@someplace.wat'}, update={ "nested.name" : "issomename" }, { "$set": {'nested.$*.value': True}}, upsert=True, full_response=True)
此代码导致:
SyntaxError: non-keyword arg after keyword arg
这让我觉得find_and_modify()方法无法处理条件更新位。
有没有办法实现这一目标,还是我走错了路?你们都建议什么是更好的方法?
答案 0 :(得分:0)
#!/usr/bin/env python
import ssl
from pymongo import MongoClient
client = MongoClient("somehost.wat", ssl=True, ssl_cert_reqs=ssl.CERT_NONE, replicaSet='rs0')
db = client.dbname
mycollection = db.docs
user_email = 'user@somehost.wat'
mycollection.update({ "emailAddress": user_email,"nestedvalue": { "$elemMatch" : {"name": "somename"} } }, { "$set": {"nestedvalue.$.value": True}})
这就是诀窍。
答案 1 :(得分:-1)
如果您只想更新一条记录,请使用update_one而不是find_any_modify,如果需要更新,请使用update_many。
用法如下:
mycollection.upadte_one({'emailAddress':'somedude@someplace.wat'},{“$ set”:{'nested。$ * .value':True}})
有关详细信息,请浏览此链接: https://docs.mongodb.com/getting-started/python/update/