[MONGODB] 중첩 된 필드에서 MongoDB를 업데이트 데이터
MONGODB중첩 된 필드에서 MongoDB를 업데이트 데이터
난 내 데이터베이스로 MongoDB를 사용하고 있습니다. 내가 데이터를 가지고 :
{
_id : '123'
friends: [
{name: 'allen', emails: [{email: '11111', using: 'true'}]}
]
}
지금, 나는 누구의 ID입니다 '123'사용자의 친구 '이메일'이메일을 수정하려면 싶어 나는 다음과 같이 쓰기 :
db.users.update ({_id: '123'}, {$set: {"friends.0.emails.$.email" : '2222'} })
이메일 배열이 두 개 이상의 데이터가 때, 그것은 잘못, 쉽게,하지만. 그래서, 내 질문은 : 내가 어떻게에서 데이터를 motify 수있는 중첩 제기 --- 두 개 이상의 중첩 된 배열을? 감사.
해결법
-
==============================
1.당신은 배열의 점 표기법을 사용해야합니다.
당신은 배열의 점 표기법을 사용해야합니다.
즉, 업데이트하려는 요소의 제로로부터 시작되는 인덱스로 $를 교체해야한다.
예를 들면 :
db.users.update ({_id: '123'}, { '$set': {"friends.0.emails.0.email" : '2222'} });
첫 번째 친구의 첫 번째 이메일을 업데이트하고
db.users.update ({_id: '123'}, { '$set': {"friends.0.emails.1.email" : '2222'} })
첫 번째 친구의 두 번째 이메일을 업데이트합니다.
-
==============================
2.멀티 레벨 배열의 업데이트 무언가가 그 일을 내 방식 엉덩이에 정말 고통입니다 : 깊은 수준의 배열을 교체합니다.
멀티 레벨 배열의 업데이트 무언가가 그 일을 내 방식 엉덩이에 정말 고통입니다 : 깊은 수준의 배열을 교체합니다.
db.user.findOne({_id:'123'},{friends:1}).lean().exec(function(err,user){ var whichArrayToUpdate; for (var ii = 0; ii < user.friends.length; ii++) { for (var jj = 0; i < user.friends[ii].emails; jj++) { if(user.friends[ii].emails[jj].email == '1111' ){// update it below user.friends[ii].emails[jj].email == 'what ever you want to set to.'; whichArrayToReplace = user.friends[ii].emails; break; } }; }; db.user.update({'friends.name':'allen'},{$set{'friends.$.email': whichArrayToReplace} }) })
하지만, 왜 저장 () 메소드를 사용하지? 저장 () 문서를 확인하지만 문서가 relly 큰 경우,이 문서의 한 부분을 대체 할 더 나은 아이디어가의 그 작은 경우, 전체 문서를 대체합니다.
또는 루프를 수행 업데이트하는 최상위 레벨 어레이 및 제 어레이 (II와 JJ)의 위치를 사용한다.
내 충고입니다 : 당신이 스키마를 설계 할 때 그 배열에 대한 업데이 트를하지 않을 않는 한, 다른 배열에 배열을 넣지 마십시오.
-
==============================
3.솔루션 몽구스를 사용하여 :
솔루션 몽구스를 사용하여 :
Users.findById("123", function(err, user) { var friends = user.friends; for ( i=0; i < friends.length; i++ ) { if (friends[i].name == 'allen') { friends[i].email = '2222'; user.save(function(err) { if (err) throw err; console.log("email updated"); }); } else { console.log("no friends named allen"); } } }
from https://stackoverflow.com/questions/19603542/mongodb-update-data-in-nested-field by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 몽구스 - ObjectId가 배열에 채우기를 사용 (0) | 2019.12.22 |
---|---|
[MONGODB] MongoDB를가 : 큰 파일을 가져올 때 mongoimport는 연결이 끊어 (0) | 2019.12.22 |
[MONGODB] 자바 스크립트의 ISO 날짜 객체를 생성 (0) | 2019.12.22 |
[MONGODB] 케이스 몽고에서 검색 문자를 구분 (0) | 2019.12.22 |
[MONGODB] 날짜를 오늘에 의해 생성 된 결과를 찾을 수 MongoDB를 (0) | 2019.12.22 |