如何在mongodb-native findOne()中使用variables作为字段名称?

我在MongoDB中有这个数据:

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

我想检索作为variables传递的字段名称上的数据查询。

以下不起作用:

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

我如何查询mongodb保持字段名称和它的值dynamic?

您需要dynamic设置查询对象的关键字:

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

当你做{name: value} ,键是string'name'而不是variablesname的值。

只要把variables放在[]

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

我想澄清一下,如果你只是想查询一个嵌套的字段(而不是它的值),就像你想从这个文档中查询字段“name”一样:

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

这将工作(在我的情况下 – 使用更新):

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

简单地将[query]括在括号里告诉mongodb它不是字面的,而是一条path。