단일 필드로 mongodb json 문서를 업데이트하려고합니다. 내 데이터가 객체 배열에 있었지만 이유가 있고 조기 설계 선택 사항을 알 수 없다면 객체 내부의 객체 일 가능성이 높습니다. 내 컬렉션에서 단일 문서의Mongodb : 포함 된 문서에 필드 추가 (배열 없음)
구조 :
{
"_id": 123123,
"drivers_teams": {
"drivers" : {
"4" : { <data> },
"5" : { <data indeed> },
...
},
...
}
}
나는 새 개체 예를 들어
const collection = db.get('collection');
let drivers = { };
drivers['111'] = { <new data> };
collection.update({}, {$set: { drivers_teams: { drivers } }}, { upsert: true }, function (err, doc) { ... });
를 추가 할
그러나 결과는의 원래 목적은 "drivers_teams는"전멸하고있다한다는 것이다 그 안에 새로운 필드 만.
이collection.update({}, {$set: { drivers }}, { upsert: true }, function (err, doc) { ... });
그것은 비 놀랍게도 drivers_teams 외부의 새로운 분야 "드라이버"
{
"_id": 123123,
"drivers" : { <new data> },
"drivers_teams": { <still original> }
}
유사 문제 (+ 솔루션)을 삽입 여기하지만 JSON은 광산처럼 중첩되지 않습니다
내가하려고하면 . https://groups.google.com/forum/#!topic/mongodb-user/ZxdsuIU94AY
내가 수행하려는 것을 성취 할 수있는 방법이 있습니까? 아니면 단일 필드를 업데이트하려고 할 때 전체 문서를 포기하고 덮어 써야합니까? 여기
편집
전문 솔루션 {$set: { 'drivers_teams.drivers.111': <data> }}
이다하지만 내가 언급해야 할 것은 그 예를 들어 키 '111'이 업데이트 데이터를 보낼 때, 그것은 클라이언트에서 실제로 알 수없는 제공된다. 새로운 솔루션이이 솔루션으로 생성 된 이유는 다음과 같습니다. dynamically name mongo key field
{ 'drivers_teams.driver.' + key: <data> }
과 같은 글을 쓰면 오류가 발생합니다.
그게 전부 야! 정말 고맙습니다! – spiritworld