[MONGODB] 포함 된 문서에 'upsert'
MONGODB포함 된 문서에 'upsert'
저는 현재 다음과 같은 데이터 세트를 가지고 :
{
'component_id':1,
'_locales':[
{
'url': 'dutch',
'locale': 'nl_NL'
}
] (etc)
}
나는 비슷한 뭔가를 실행할 것 로케일로 행을 업데이트하려면 :
db.components.update(
{'component_id': 1, '_locales.locale': 'nl_NL'},
{$set: {'_locales.$': {'url': 'new url','locale':'nl_NL'}},
true
);
로케일이 존재하지 않을 때까지이 잘 작동합니다 :
db.components.update(
{'component_id': 1, '_locales.locale': 'en_US'},
{$set: {'_locales.$': {'url': 'new url','locale':'en_US'}},
true
);
component_id에 고유 인덱스가 있기 때문에이 중복 키에 대해 불평 예외가 발생합니다.
자동으로 다른 로케일로 새로운 '문서'를 추가하고 이미 존재하는 경우이를 업데이트하는 방법이 있나요? 'upserting'와 위치 연산자하지 않습니다 작업을 사용하여 문서에 따르면.
해결법
-
==============================
1.당신은 세트가 있는지 중복 배열 요소가없는 만들기 위해 추가 $ addToSet을 사용할 수 있지만 당신의 "업데이트"경우에 작동하지 않습니다.
당신은 세트가 있는지 중복 배열 요소가없는 만들기 위해 추가 $ addToSet을 사용할 수 있지만 당신의 "업데이트"경우에 작동하지 않습니다.
당신이 원하는 일을하기 위해, 당신은 같은 당신의 데이터 구조를 변경해야합니다 :
{ "_id" : ObjectId("4f9519d6684c8b1c9e72e367"), "component_id" : 1, "_locales" : { "nl_NL" : { "url" : "dutch" } } }
이제 당신은 단지와 NL_NL 로케일에 대한 업데이 트를 수행 할 수 있습니다
db.components.update( { component_id: 1 }, { $set: { '_locales.nl_NL.url' : 'new url' } }, true );
그리고 새로운 로케일은와 마찬가지로 잘 작동합니다 :
db.components.update( { component_id: 1 }, { $set: { '_locales.en_US.url' : 'American' } }, true );
당신처럼뿐만 아니라, 아마도 중첩 된 개체의 일부로서 로케일을 데 고려할 수 있습니다 :
{ "_id" : ObjectId("4f9519d6684c8b1c9e72e367"), "component_id" : 1, "_locales" : { "nl_NL" : { "url" : "dutch" "locale" : "nl_NL" } } }
이것은 쉽게 어떤 경우에는 데이터를 검색 할 수 있습니다.
from https://stackoverflow.com/questions/10277174/upsert-in-an-embedded-document by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 필드 MongoDB의 존재 질의 향상 (0) | 2019.12.24 |
---|---|
[MONGODB] MongoDB를에 $을 모두 사용하여 배열 값을 일치시키기위한 여러 $의 elemMatch 식? (0) | 2019.12.24 |
[MONGODB] 몽구스 - 어떻게하여 그룹과 채우려면? (0) | 2019.12.24 |
[MONGODB] 어떻게하여 MongoDB에서 배열의 n 번째 요소를 삭제합니다 (0) | 2019.12.24 |
[MONGODB] 쉽게에 가이드를 저장하는 실제 GUID를 검색하는 효율적인 방법이 무엇인지 문서의 아이디에 대한 MongoDB를하고 가이드와 함께? (0) | 2019.12.24 |