programing

몽고에서 $addToSet 키를 지정할 수 있습니까?

coolbiz 2023. 3. 15. 23:12
반응형

몽고에서 $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

반응형