如何在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。