복붙노트

[MONGODB] 어떻게하여 MongoDB에서 필드를 증가 하는가?

MONGODB

어떻게하여 MongoDB에서 필드를 증가 하는가?

나는 다음과 같은 몽고 DB 문서 구조를 가지고 :

{
  _id: channelId, 
  title: channelTitle,
  pubDate: channelPubdate, 
  items: 
  [
    {
      title: newsTitle,
      desc: newsDescription, 
      link: newsLink, 
      pubDate: Date, 
      clicks: 0
    },
    {/*One more*/},
    {/*...*/}
  ] 
}

나는 (배열에 포함 된 문서의 필드를 업데이트하는) 컬렉션의 "클릭"필드를 증가 문제가 있습니다.

나는 이벤트 핸들러 (클라이언트)이 시도 :

News.update({ _id : Session.get("channelId"), "items.link" : this.link },
  { $inc: { "items.clicks": 1 } }
);

그러나 오류를 제공합니다 : catch되지 않은 오류 : 허용되지 않음. 신뢰할 수없는 코드는 ID로 문서를 업데이트 할 수 있습니다. [403]

나는 다음 서버 방법을 통해 시도 :

Meteor.methods({
    incClicks: function(id, news) 
    {
      News.update({ _id : id, "items.link" : news.link }, 
        { $inc : { "items.clicks": 1 } }
      );
    }
});

또 다른 예외 : 예외 호출 방법 'incClicks'MongoError 동안 : APPEND 수없는 문자열 필드 명을 사용하여 배열 클릭 수

이 작업에 대한 올바른 몽고의 요구는 무엇일까요?

해결법

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

    1.오류가 나타난 바와 같이, 클라이언트에서 당신은 단지 간단한 _id 선택하여 업데이트를 수행 할 수 있습니다. 난 당신의 코드를 약간 수정과 방법을 사용하는 것이 좋습니다 것입니다 :

    오류가 나타난 바와 같이, 클라이언트에서 당신은 단지 간단한 _id 선택하여 업데이트를 수행 할 수 있습니다. 난 당신의 코드를 약간 수정과 방법을 사용하는 것이 좋습니다 것입니다 :

    Meteor.methods({
      incClicks: function(id, news) {
        check(id, String);
        check(news, Match.ObjectIncluding({link: String}));
    
        News.update(
          {_id: id, 'items.link': news.link},
          {$inc: {'items.$.clicks': 1}}
        );
      }
    });
    

    여기에서 우리는 특정 포함 된 문서를 업데이트하려면 $ 연산자를 사용하고 있습니다. 자세한 내용은 문서를 참조하십시오.

  2. from https://stackoverflow.com/questions/27707365/how-to-increment-a-field-in-mongodb by cc-by-sa and MIT license