반응형
몽고에서 $addToSet 키를 지정할 수 있습니까?
문서가 있습니다.
{ 'profile_set' :
[
{ 'name' : 'nick', 'options' : 0 },
{ 'name' : 'joe', 'options' : 2 },
{ 'name' : 'burt', 'options' : 1 }
]
}
새로운 문서를 추가하려고 합니다.profile_set
(옵션에 관계없이) 이름이 아직 존재하지 않는 경우 설정됩니다.
이 예에서는 다음 항목을 추가하려고 합니다.
{'name' : 'matt', 'options' : 0}
추가될 것입니다.
{'name' : 'nick', 'options' : 2}
이름을 가진 문서가 이미 존재하기 때문에 아무 작업도 수행하지 않습니다.nick
비록option
다릅니다.
몽고는 요소 전체에 대해 일치하는 것 같고, 나는 결국 같은지 확인하고, 그리고 나는 그것을 가지고 끝납니다.
profile_set containing [{'name' : 'nick', 'options' : 0}, {'name' : 'nick', 'options' : 2}]
이 작업을 할 수 있는 방법이 있나요?$addToSet
아니면 다른 명령어를 눌러야 하나요?
자격요건을 지정할 수 있습니다.update
이 경우 업데이트를 방지하는 쿼리 개체를 사용하여name
에 이미 존재합니다.profile_set
. 셸:
db.coll.update(
{_id: id, 'profile_set.name': {$ne: 'nick'}},
{$push: {profile_set: {'name': 'nick', 'options': 2}}})
따라서 이 동작은,$push
짝이 있는 의사에게는_id
이 없는 곳에서는profile_set
요소name
이'nick'
.
MongoDB 4.2에서는 업데이트 시 집약식을 사용하여 이를 수행하는 방법이 있습니다.
이 예에서는 다음과 같이 합니다.
newSubDocs = [ {'name' : 'matt', 'options' : 0}, {'name' : 'nick', 'options' : 2} ];
db.coll.update( { _id:1 },
[
{$set: { profile_set: {$concatArrays: [
"$profile_set",
{$filter: {
input:newSubDocs,
cond: {$not: {$in: [ "$$this.name", "$profile_set.name" ]}}
}}
]}}}
])
언급URL : https://stackoverflow.com/questions/14527980/can-you-specify-a-key-for-addtoset-in-mongo
반응형
'programing' 카테고리의 다른 글
비주얼 컴포저에서 동적 필드를 만드는 방법 (0) | 2023.03.15 |
---|---|
제목 없이_sublic_interation()을 사용합니다. (0) | 2023.03.15 |
require("history/createBrowserHistory") 대신 require("history").createBrowserHistory를 응답합니다. (0) | 2023.03.15 |
Oracle SELECT TOP 10 레코드 (0) | 2023.03.15 |
사용자가 열려 있는 모든 탭에서 로그아웃할 때 사용자를 자동으로 로그아웃하려면 어떻게 해야 합니까? (0) | 2023.03.15 |