programing

mongodb-native findOne()의 필드명으로 변수를 사용하는 방법

lovejava 2023. 3. 5. 09:16

mongodb-native findOne()의 필드명으로 변수를 사용하는 방법

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}키는 string 입니다.'name'변수 값이 아닌name.

변수를 []에 넣기만 하면 됩니다.

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는 문자 그대로가 아니라 경로임을 나타냅니다.

개체가 중첩된 경우 이렇게 사용합니다.

직접 객체:-

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);
});

언급URL : https://stackoverflow.com/questions/17039018/how-to-use-a-variable-as-a-field-name-in-mongodb-native-findone