복붙노트

[MONGODB] 객체의 배열에 몽구스 / MongoDB를 $ addToSet 기능을 사용하여

MONGODB

객체의 배열에 몽구스 / MongoDB를 $ addToSet 기능을 사용하여

나는 몽구스 스키마 ( '기사')이 배열 속성을 가지고 말 :

articles: [ 

 {
  kind: 'bear',
  hashtag: 'foo'    
 },

 {
  kind: 'llama',
  hashtag: 'baz',
  },

 {
  kind: 'sheep',
  hashtag: 'bar',
  }

]

내가 사용하는 방법

이 독특한 있는지 확인하기 위해 해시 태그의 값을 확인하여이 배열에 추가?

나는 위의 배열에 다음 개체를 추가 할 경우 중복으로 '거부'에 예를 들어, 나는 몽고를 원하는 :

{
  kind: 'tortoise',
  hashtag: 'foo'

}

해시 태그 때문에 = foo는 이미 촬영되었습니다.

문제는 난 단지 정수의 간단한 배열 $ addToSet을 사용하는 방법을 알고 있다는 것입니다 ...

예를 들어, 기사는이처럼 보였다 경우 :

articles: [ 1 , 5 , 4, 2]

나는이 같은 $ addToSet을 사용합니다 :

var data = {

    "$addToSet": {
     "articles": 9
   }

}

model.update(data);

하지만 어떻게 고유 필드가 문자열이 경우 '해시 태그'에서, 객체의 배열과 같은 일을 수행 할 수 있습니까? 워드 프로세서는이 명확하게하지 않고 내가 모든 곳에서 검색 한 것처럼 보인다 ..

감사

해결법

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

    1.당신은 $ 네브라스카 연산자를 사용합니다.

    당신은 $ 네브라스카 연산자를 사용합니다.

    var data = { 'kind': 'tortoise', 'hashtag': 'foo' };
    Model.update(
        { 'article.hashtag': { '$ne': 'foo' } }, 
        { '$addToSet': { 'article': data } }
    )
    

    해시 태그의 값으로 "기사"배열에는 하위 문서는 "foo는"같음이없는 경우에만이 문서를 업데이트합니다.

    @BlakesSeven는 주석에서 언급 한 바와 같이

    Model.update({ 
        { 'article.hashtag': { '$ne': 'foo' } }, 
        { '$push': {'article':  data } }
    )
    
  2. ==============================

    2.

    // add the comment's id to the commentsList : 
                            // share.comments.commentsList.addToSet(callback._id);
                            share.update(
                                { '$push': {'comments.commentsList':  mongoose.Types.ObjectId(callback._id) } }
                            , function(){
                                console.log('added comment id to the commentsList array of obectIds')
                            })
    
  3. from https://stackoverflow.com/questions/33576223/using-mongoose-mongodb-addtoset-functionality-on-array-of-objects by cc-by-sa and MIT license