Cómo usar una variable como nombre de campo en mongodb-native findOne ()?

Tengo esta información en mongodb:

{ "name": "Amey", "country": "India", "region": "Dhule,Maharashtra" } 

y quiero recuperar los datos mientras paso un nombre de campo como una variable en la consulta.

Lo siguiente no funciona:

 var name = req.params.name; var value = req.params.value; collection.findOne({name: value}, function(err, item) { res.send(item); }); 

¿Cómo puedo consultar mongodb manteniendo dynamic tanto el nombre de campo como su valor?

Debe establecer la clave del objeto de consulta de forma dinámica:

 var name = req.params.name; var value = req.params.value; var query = {}; query[name] = value; collection.findOne(query, function (err, item) { ... }); 

Cuando hace {name: value} , la clave es la cadena 'name' y no el valor del name de la variable.

Solo ponga la variable en []

 var name=req.params.name; var value = req.params.value; collection.findOne({[name]:value}, function(err, item) { res.send(item); }); 

Me gustaría aclarar que si intenta hacer una consulta sobre un campo nested solamente (no su valor), como si desea consultar el campo “nombre” de este documento:

 { loc: [0, 3], unit: { name : "playername" } } 

esto funcionará (como en mi caso, usando la actualización):

 mdb.cords.updateOne( {_id: ObjectID(someid)}, {$set: {[query]: newValue}}, function (err, result) { ... } } 

Simplemente adjuntando [query] entre paréntesis le dice a mongodb que no es literal, sino más bien una ruta.