2011-12-24 57 views
13

Me gustaría incrementar el recuento de views en 1 cada vez que se accede a mi documento. Hasta ahora, mi código es:

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

dónde viene $inc encajar aquí?

+0

¿Te ayudó esto? Si no, házmelo saber. –

Respuesta

30

nunca utilizado mangosta pero mirando rápidamente en los documentos here Parece que esto funcione para usted:

# 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(); 

Saludos y buena suerte!

6

Me encontré con otro problema, que está relacionado con $ inc. Así que lo publicaré aquí ya que podría ayudar a otra persona. Tengo el siguiente código:

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 
    } 
} 

de un módulo diferente que yo llamaría algo así como

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

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

Sin embargo, esto no aumentaría el contador deseado. Aparentemente, no está permitido pasar directamente la clave al objeto de actualización. Esto tiene algo que ver con la sintaxis de los literales de cadena en los nombres de campo de objeto. La solución fue definir el objeto de actualización como este:

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

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

    Schema.findByIdAndUpdate(id, update, function(err, data){ 
     //error handling 
    } 
} 
+6

El error en la primera versión de su código es este: '{$ inc: {key: amount}}'. En realidad, no estás usando la variable 'key', pero haciendo que el objeto clave sea la cadena' 'key ''. La forma correcta de escribir este código es '{$ inc: {[key]: amount}}', usando [claves de propiedad compiladas de ES2015] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operadores/Object_initializer). – Joseph

Cuestiones relacionadas