2011-07-15 16 views
8

Quiero aumentar un campo dentro de un objeto objeto dentro de un documento por mongodb 1.variable, con dotnotation mongodb

var stuffID = 5 
    collection.update({ 
    "id": id, 
    }, 
    { 
    '$inc': { 
     'stuff.stuffID': 1 
    } 
    }, 
    function(err, doc) { 
    res.end('done'); 
    }); 

Necesito hacer que stuffID una variable. ¿Alguna forma de hacer esto? Gracias.

Esto está usando node-mongodb-native si eso ayuda.

Si va a votar para cerrar ¿puede explicar qué es lo que no comprende?

+0

¿En qué sentido desea "hacer que stuffID sea una variable"? – cwb

+0

@cwb like if stuffID es en realidad un valor diferente y no la cadena stuffID. – Harry

Respuesta

13

lo necesario para crear el objeto introducido de forma variable, por separado, debido a JS antes ES2015 no permite que no sean cadenas constantes en la sintaxis literal de objeto nada:

var stuffID = 5 
var stuff = {};     // create an empty object 
stuff['stuff.' + stuffID] = 1; // and then populate the variable key 

collection.update({ 
    "id": id, 
}, { 
    "$inc": stuff    // pass the object from above here 
}, ...); 

EDIT en ES2015, que es ahora es posible usar una expresión como clave en un objeto literal, usando la sintaxis [expr]: value, y en este caso también usando ES2015 backtick string interpolation:

var stuffID = 5; 
collection.update({ 
    "id": id, 
}, { 
    "$inc": { 
     [`stuff.${stuffID}`]: 1 
    } 
}, ...); 

El código anterior funciona en Node.js v4 +

-2

Coloque la variable donde dice stuffID.

'stuff.' + varname: 1 
+0

''cosas'. + StuffID: 1 ^ module.js: err 301 tiro; ^ SyntaxError: Token inesperado + ' – Harry

+1

No creo que pueda poner un + en una tecla? – Harry

+0

Luego ponga el 'cosas'. en la variable también y no tendrás que concatenar. –