2016-08-04 1 views
0

중첩 된 값에 조건부 업데이트를 수행하려고합니다. 기본적으로 배열 항목 당 2 개의 변수가 중첩 배열에있는 하나의 변수는 다른 변수의 문자열 값을 기반으로 업데이트하려는 부울 구성 요소가 있습니다.find_and_modify() 호출에서 조건부 업데이트로 PyMongo에 문제 발생

타겟 된 검색 쿼리를 기반으로 모든 작업을 수행하고 싶습니다. 나는 이것을 생각해 냈지만 작동하지 않는다.

SyntaxError: non-keyword arg after keyword arg 

이 나를 find_and_modify() 메소드는 조건 업데이트 비트를 처리 할 수 ​​있다고 생각합니다 :에

#!/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':'[email protected]'}, update={ "nested.name" : "issomename" }, { "$set": {'nested.$*.value': True}}, upsert=True, full_response=True) 

이 코드의 결과.

이 작업을 수행 할 수있는 방법이 있습니까? 아니면 잘못된 경로로 이동 했습니까? 더 나은 접근 방법으로 무엇을 제안 하시겠습니까?

답변

-1

find_any_modify 대신 하나의 레코드 만 업데이트하려면 update_one을 사용하고 많은 경우 update_many를 사용하십시오.

사용법은 다음과 같이이다 :

mycollection.upadte_one ({ 'EMAILADDRESS': '[email protected]가'}, { "$ 세트가": { '중첩 $ * 값..'TRUE} }이 링크를 통해 이동하시기 바랍니다 더 세부 사항에 대한)

: https://docs.mongodb.com/getting-started/python/update/

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 = '[email protected]' 
mycollection.update({ "emailAddress": user_email,"nestedvalue": { "$elemMatch" : {"name": "somename"} } }, { "$set": {"nestedvalue.$.value": True}}) 

이 트릭을했다.