2011-08-12 9 views
5

¿Hay alguna forma de usar claves dinámicas con el controlador node-mongodb-native? Con esto me refiero a tener una variable mantenga presionada la tecla en lugar de usar la tecla directamente.¿Hay alguna forma de utilizar una clave dinámica con node-mongodb-native?

Como en cuando uno normalmente hacer esto:

db.createCollection('col', function(err, col){ 
    col.insert({'_id':'wak3ajakar00'}); 
} 

a hacer esto en su lugar:

db.createCollection('col', function(err, col){ 
    var ID = '_id'; 
    col.insert({ID:'wak3ajakar00'}); 
} 

Cuando ejecuto el último código, termino con un documento en db.col colección con una clave llamada ID además de una _id creada de forma estándar, en contraposición a solo una clave _id con el valor wak3ajakar00. Esto me lleva a pensar que no es posible hacerlo directamente.

En cambio, ahora estoy apenas crear el documento que quiero insertar antes de tiempo de la siguiente manera:

db.createCollection('col', function(err, col){ 
    var ID = 'wak3ajakar00'; 
    var key = '_id'; 
    insertion = {} 
    insertion[key] = ID; 
    col.insert(insertion); 
} 

Esto funciona exactamente como yo quiero que, pero yo sólo quería saber si hay mejores formas de hacerlo. JavaScript, NodeJS y MongoDB son nuevos para mí, por lo que siento que podría extrañar algo fácilmente. Si no, ¿hay alguna manera más clara de escribir el código anterior en JavaScript?

mejores, y gracias,
Sami

+0

Posible duplicado de [¿Cómo agrego una propiedad a un objeto JavaScript usando una variable como nombre?] (Http://stackoverflow.com/questions/695050/how-do-i-add-a-property- to-a-javascript-object-using-a-variable-as-the-name) –

Respuesta

9

En la sintaxis literal de objeto, no se puede utilizar una variable como el nombre de clave, sólo valores. La forma de hacerlo es la forma en que ya descubrió: primero cree su objeto y luego agregue la propiedad como un paso separado usando la notación de corchetes cuadrados.

var obj = {}; 
var ID = "_id"; 
obj[ID] = "wak3ajakar00"; 
2

Se puede escribir una pequeña función que crea un objeto tal

var obj = function(key, value, obj) { 
    obj = obj || {}; 
    obj[key] = value; 
    return obj; 
} 

// Usage 
foo = obj('foo' + 'bar', 'baz'); 
// -> {'foobar': 'baz'} 

foo = obj('stack' + 'over', 'flow', foo); 
// -> {'foobar': 'baz', 'stackover': 'flow'} 

No sé si llamar a esta función obj es una buena idea.

Cuestiones relacionadas