programing

개체 배열에서 Mongoose / MongoDB $addToSet 기능 사용

javajsp 2023. 7. 13. 20:39

개체 배열에서 Mongoose / MongoDB $addToSet 기능 사용

Mongoose 스키마에 이 배열 속성('article')이 있다고 합니다.

articles: [ 

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

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

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

]

사용 방법

$addToSet https://docs.mongodb.org/manual/reference/operator/update/addToSet/

고유한지 확인하기 위해 해시태그의 값을 확인하여 이 배열에 추가할 수 있습니까?

예를 들어, 위 배열에 다음 개체를 추가하려면 Mongo가 중복 개체로 '거부'하기를 원합니다.

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

}

왜냐하면 해시태그=foo는 이미 가져갔기 때문입니다.

문제는 제가 사용법만 알고 있다는 것입니다.$addToSet단순한 정수 배열로...

예를 들어, 기사가 다음과 같이 보일 경우:

articles: [ 1 , 5 , 4, 2]

다음과 같이 $addToSet을 사용합니다.

var data = {

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

}

model.update(data);

그러나 고유 필드가 문자열인 객체 배열에서 어떻게 동일한 작업을 수행할 수 있습니까? 이 경우 'hashtag'.서류상으로는 이것을 명확하게 알 수 없고 제가 모든 곳을 찾아본 것 같습니다.

감사해요.

연산자를 사용해야 합니다.

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

해시태그 값이 "foo"인 "article" 배열에 하위 문서가 없는 경우에만 문서가 업데이트됩니다.

@BlakeSeven이 댓글에서 언급했듯이.

값 중 하나가 있는지 테스트하는 경우에는 관련이 없으므로 코드 명확성을 위해 를 사용하는 것이 좋습니다.하지만 그 원리는 정확합니다. 왜냐하면 그것의 일부가 아니라 전체적인 대상에 작용하기 때문입니다.

Model.update({ 
    { 'articles.hashtag': { '$ne': 'foo' } }, 
    { '$push': {'articles':  data } }
)
// 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')
                        })

언급URL : https://stackoverflow.com/questions/33576223/using-mongoose-mongodb-addtoset-functionality-on-array-of-objects