Nice programing

mongodb-native findOne ()에서 변수를 필드 이름으로 사용하는 방법은 무엇입니까?

nicepro 2020. 10. 11. 11:19
반응형

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}키는 '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는 그것이 리터럴이 아니라 경로임을 알려줍니다.

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

반응형