У меня есть эти данные в 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, сохраняя как имя поля, так и его значение динамически?
Ответы:
Вам необходимо динамически установить ключ объекта запроса:
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
.источник
value
запросом вроде{ $gt: 50 }
Просто поместите переменную в []
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 name=req.params.name; var value = req.params.value; collection.findOne({[name]:value}, function(err, item) { res.send(item); });
Объект вложен: -
var surname=req.params.surname; var value = req.params.value; var condition = `name.${surname}` collection.findOne({[condition]:value}, function(err, item) { res.send(item); });
источник
'name.${surname}'
но для переменной, которую мы не используем ', спасибо