我在 mongodb 中有这个数据:
{
"name": "Amey",
"country": "India",
"region": "Dhule,Maharashtra"
}
我想在查询中将字段名称作为变量传递时检索数据。
以下不起作用:
var name = req.params.name;
var value = req.params.value;
collection.findOne({name: value}, function(err, item) {
res.send(item);
});
如何查询 mongodb 以保持字段名称及其值动态?
需要动态设置查询对象的key:
var name = req.params.name;
var value = req.params.value;
var query = {};
query[name] = value;
collection.findOne(query, function (err, item) { ... });
当您执行
{name: value}
时,键是字符串'name'
而不是变量name
的值。
只需将变量放入 []
var name=req.params.name;
var value = req.params.value;
collection.findOne({[name]:value}, function(err, item) {
res.send(item);
});
我想澄清一下,如果您尝试仅查询有关嵌套字段(而不是其值),例如您想从该文档中查询字段“名称”:
{
loc: [0, 3],
unit: {
name : "playername"
}
}
这会起作用(就像我的情况一样 - 使用更新):
mdb.cords.updateOne(
{_id: ObjectID(someid)},
{$set: {[query]: newValue}},
function (err, result) {
...
}
}
简单地将
[query]
括在方括号中告诉mongodb它不是文字,而是一条路径。
如果对象是嵌套的,就这样使用。
一个对象是嵌套的:-
var surname=req.params.surname;
var value = req.params.value;
var condition = `name.${surname}`
collection.findOne({[condition]:value}, function(err, item) {
res.send(item);
});