이 데이터는 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
입니다.
답변
변수를 []에 넣으십시오.
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);
});