Использование $inc для увеличения свойства документа с помощью Mongoose
Я хотел бы увеличить счетчик views
на 1 каждый раз, когда будет доступен доступ к моему документу. До сих пор мой код:
Document
.find({})
.sort('date', -1)
.limit(limit)
.exec();
Где находится $inc
здесь?
Ответы
Ответ 1
Никогда не использовал mongoose, но быстро просматривал документы здесь кажется, что это сработает для вас:
# 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();
Приветствия и удачи!
Ответ 2
Я столкнулся с другой проблемой, которая связана с $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
}
}