복붙노트

[MONGODB] 당신은 몽고에서 $ addToSet에 대한 키를 지정할 수 있습니까?

MONGODB

당신은 몽고에서 $ addToSet에 대한 키를 지정할 수 있습니까?

나는 문서가 :

{ 'profile_set' :
  [
    { 'name' : 'nick', 'options' : 0 },
    { 'name' : 'joe',  'options' : 2 },
    { 'name' : 'burt', 'options' : 1 }
  ] 
}

그리고 이름이 이미 (옵션에 관계없이) 존재하지 않는 경우 profile_set 세트에 새 문서를 추가하고 싶습니다.

내가 추가하려고하면이 예에서는 이렇게 :

{ '이름': '매트', '옵션'0}

그것을 추가 할 수 있지만 추가한다

{ '이름': '닉', '옵션': 2}

아무것도하지 않고해야 할 문서가 이미 옵션이 다른 경우에도 이름을 별명으로 존재하기 때문이다.

몽고는 전체 요소에 대해 일치 보인다 나는 그것이 동일합니다 있는지 확인하는 끝낼 내가 끝낼

profile_set containing [{'name' : 'nick', 'options' : 0}, {'name' : 'nick', 'options' : 2}]

$ addToSet이 할 수있는 방법이 있나요 아니면 다른 명령을 밀어해야합니까?

해결법

  1. ==============================

    1.당신은 이름이 이미 profile_set에있는 경우 업데이트를 방지 질의 객체로 업데이 트를받을 수 있습니다. 쉘의 경우 :

    당신은 이름이 이미 profile_set에있는 경우 업데이트를 방지 질의 객체로 업데이 트를받을 수 있습니다. 쉘의 경우 :

    db.coll.update(
        {_id: id, 'profile_set.name': {$ne: 'nick'}}, 
        {$push: {profile_set: {'name': 'nick', 'options': 2}}})
    

    이것은 단지 일치와 문서에 대한 $ 푸시을 수행 그래서 _ID와 이름이 '닉'는 어디 profile_set 요소가없는입니다.

  2. from https://stackoverflow.com/questions/14527980/can-you-specify-a-key-for-addtoset-in-mongo by cc-by-sa and MIT license