저는 MongoDB 초보자이며 upsert 및 list와 관련된 업데이트 명령을 작성하는 방법을 묻고 싶습니다. , 여행이 이미 존재하지 않는 경우 당신은 여행의 이름과 현재 위치 MongoDB - upsert 관련 목록
- : 것을
{"_id" : ObjectId("4c28f62cbf8544c60506f11d"), "some_other_data":"goes here", "trips": [ {"name": "2010-05-10", "loc": [{"lat":21.321231, "lng": 16.8783234, "updated_at": "Mon May 10 2010 15:24:35"}, {"lat":21.321231, "lng": 16.8783234, "updated_at": "Mon May 10 2010 15:24:24"}] }, {"name": "2010-05-08", "loc": [{"lat":21.324239, "lng": 16.8735234, "updated_at": "Mon May 8 2010 11:18:05"}, {"lat":21.311234, "lng": 16.8743271, "updated_at": "Mon May 8 2010 11:17:55"}, {"lat":21.321238, "lng": 16.8782219, "updated_at": "Mon May 8 2010 11:17:45"}] } ]}
참고 :
기본적으로 나는 이런 식으로 뭔가를 달성하고 싶다 그것 가 만들어 질 필요가있다
- trips.name은 유일해야한다 그래서 존재한다면 ts, 위치 배열에 추가하십시오.
이것은 위치 연산자를 $ push와 결합하여 작성한 쿼리입니다.
db.mycollection.update({"application_id": "MyTestApp",
"trips.name": "2010-05-10"},
{$push: {'trips.$.loc': {"lat":11, "lng":11} }},
true);
하지만이 같은 데이터가 발생합니다
> db.mycollection.find({"application_id":"MyTestApp"})
{ "_id" : ObjectId("4c29044ebf8544c60506f11f"),
"application_id" : "MyTestApp",
"trips" : { "$" : { "loc" : [ { "lat" : 11, "lng" : 11 } ] },
"name" : "2010-05-10" }
}
당신은
- "여행"은 말 그대로 "$"를 가져다가 만든 배열
- 아니라고 볼 수 있습니다 a 키가 있습니다 (doh!)
지금까지 MongoDB에 상당히 만족했지만 복잡한 쿼리를 작성하는 데에는 가파른 학습 곡선이 있습니다.
모든 의견을 환영합니다. 사전에
감사합니다, 에이미
다시 내 대답은 아래를 확인 - 나는 당신이 매우 가까이해야하는 솔루션 (또는 적어도 뭔가 생각하는 것을 포함하도록 편집) – nearlymonolith
이 [SO 스레드] (http://stackoverflow.com/questions/17994552/mongodb-update-documents-in-an-array/17995495#17995495)를 참조하십시오. 이와 비슷한 내용입니다. – user10