2012-02-05 16 views
7

Estoy tratando de incrementar un valor en una colección en mi base de datos MongoDB a través de la mangosta. Este es el código de demostración se muestra en la página web de la mangosta:El aumento de un campo en una colección MongoDB con Mangosta

var conditions = { name: 'borne' } 
    , update = { $inc: { visits: 1 }} 
    , options = { multi: true }; 

Model.update(conditions, update, options, callback) 

Y yo tener algo como esto:

var conditions = { "uniqueId" : itemId }; 
var update; 
if(increase) 
    update = {$inc : {inStock : 1}}; 
else 
    update = {$dec : {inStock : 1}}; 
Item.update(conditions, update, {}, callback); 

Como se puede ver que no hay mucha diferencia con código de la página web de la Mangosta.

El problema es que cuando se ejecuta esta pieza de código, termino tener en mi colección un campo llamado $dec (o $inc) que tiene un objeto como un campo en el formulario {inStock : 1}. Simplemente me gustaría incrementar la entrada inStock de la colección. En el esquema tengo:

var ItemToSell = new Schema({ 
    uniqueId : { type: Number, index: true } 
    , name  : String 
    , type  : String 
    , inStock : Number 
}); 

¿Alguien puede decir qué estoy haciendo mal? Muchas gracias.

Respuesta

3

A) Asegúrese de que está Mangosta es de hasta al día. Las versiones más antiguas eran muy verde en Model.update operaciones debido Mangosta intenta inferir cuando se está simplemente pasando un nuevo objeto, en cuyo caso se convierte su objeto update en una operación $set.

B) Retire el vacío {} de su llamada a la función. Es opcional y al pasar un objeto vacío en lugar de las opciones reales, puede confundir a Mongoose para que configure la opción { safe: false }, lo que también podría estar causando su problema. No revisé el código fuente para confirmar que ese podría ser el problema, pero probablemente valga la pena intentarlo.

+0

Gracias por la respuesta. Al eliminar el '{}} vacío, resolví el problema que causaba que' {"$ dec": {"inStock": 1}} 'se añadiera a la colección. Tenías razón también con el hecho de que estaba usando una versión anterior de Mongoose PERO aún así no resolvió el problema. Ahora parece que no hace nada en absoluto a la colección. – Masiar

+4

Ok, resolví el problema. La entrada 'err' de la función de devolución de llamada dio algo ahora que actualizo mi versión de Mongoose. Descubrí que '$ dec' no existe, por lo tanto, para disminuir, tengo que ingresar una cantidad negativa (' {$ inc: {inStock: -1}} '). Gracias por intentarlo, ¡ayudó mucho! – Masiar

+0

¿sabes cómo "** inStock **" como parámetro? –

Cuestiones relacionadas