2011-10-31 3 views
0

Mongodb에서 다음 문서를 업데이트하려고합니다.MongoDb 배열 업데이트

동시에 이러한 업데이트 할 수있는 방법이 있나요 :

db.test.update({'id':10,'graph.userId' : 1}, { $push:{'graph.$.children':10}}) 

db.test.update({'id':10,'graph.userId' : 1},{ $push:{'graph':{'userId':10,'children':[]}}}) 

(

db.test.update({'id':10,'graph.userId' : 1},{ $push:{'graph.$.children':10},$push:{'graph':{'userId':10,'children':[]}}}) 

이 작동하지 않습니다 Saddly :)

doc = { id : 10 , graph :[{userId:1,children:[2]},{userId:2,children:[]}]} 

    db.test.insert(doc) 

는 내가 두 업데이트를 수행?

덕분에 당신은 함께 여러 업데이트 작업을 묶을 수 많은

답변

1

다수의 키 작동을 중지 :

이 시도해보십시오. 새로운 자식을 현재 위치로 밀어 넣고 부모의 하위 문서에 새 레코드를 넣으려고하면 오른쪽으로 읽는다면 두 번의 업데이트가 필요합니다.

중지하는 것은 아이들의 설정입니다. 몽고는 그걸 어디에 둘 것인지 모릅니다.

난 당신이 시도 할 수도있을 것 같군요 :

db.test.update({'id':10,'graph.userId' : 1},{ $push:{'graph.$.children':10},$pushAll:{'graph':{{'userId':10,'children':[]}}}}) 

을하지만 긴 촬영

+0

도움을 주셔서 감사합니다. 끔찍한 업데이트가 작동하지 않습니다. – jlezard

2

,하지만 당신은 의사 코드로 작성했는지 유일한 문제는 당신이 다른 배열 (그래프와 graph.children에 속해 밀고있는 요소)이 작업은 두 번 밀기 만하면됩니다. 수정 자 배열에

db.test.update({ id:10, 'graph.userId':1 }, 
     { $push:{'graph.$.children' : 4 }, $push:{'graph' : {'userId':4,'children':[]}} }) 
+0

아무 문제가 없다, – jpredham

+0

정말 죄송 몽고 즐길하지만이 작동하지 않습니다 밝혀졌습니다. 나는 질문을 편집했습니다. 덕분에 – jlezard

+1

두 번째 푸시가 첫 번째 우선 적용됩니다. – light24bulbs