Использование $ inc для увеличения свойства документа с помощью Mongoose - PullRequest
16 голосов
/ 24 декабря 2011

Я хотел бы увеличить счет views на 1 каждый раз, когда к моему документу обращаются.Пока что мой код:

Document
    .find({})
    .sort('date', -1)
    .limit(limit)
    .exec();

Где тут $inc вписывается?

Ответы [ 2 ]

35 голосов
/ 27 декабря 2011

Никогда не использовал мангуста, но быстро просматривал документы здесь кажется, что это сработает для вас:

# create query conditions and update variables
var conditions = { },
    update = { $inc: { views: 1 }};

# update documents matching condition
Model.update(conditions, update).limit(limit).sort('date', -1).exec();

Приветствия и удачи!

8 голосов
/ 26 мая 2015

Я столкнулся с другой проблемой, которая как-то связана с $ inc. Поэтому я опубликую это здесь, так как это может помочь кому-то еще.У меня есть следующий код:

var Schema = require('models/schema.js');

var exports = module.exports = {};

exports.increase = function(id, key, amount, callback){
   Schema.findByIdAndUpdate(id, { $inc: { key: amount }}, function(err, data){
      //error handling
   }
}

из другого модуля, я бы назвал что-то вроде

var saver = require('./saver.js');

saver.increase('555f49f1f9e81ecaf14f4748', 'counter', 1, function(err,data){
    //error handling
}

Однако это не увеличит желаемый счетчик.Видимо, не разрешено напрямую передавать ключ в объект обновления.Это как-то связано с синтаксисом строковых литералов в именах полей объекта.Решением было определить объект обновления следующим образом:

exports.increase = function(id, key, amount, callback){

   var update = {};
   update['$inc'] = {};
   update['$inc'][key] = amount;

   Schema.findByIdAndUpdate(id, update, function(err, data){
      //error handling
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...