it-swarm.com.de

Wie verwende ich eine Variable als Feldnamen in mongodb-native findOne ()?

Ich habe diese Daten in Mongodb:

{  
    "name": "Amey",
    "country": "India",
    "region": "Dhule,Maharashtra"
}

und ich möchte die Daten abrufen, während ein Feldname als Variable in der Abfrage übergeben wird.

Folgendes funktioniert nicht:

var name = req.params.name;
var value = req.params.value;
collection.findOne({name: value}, function(err, item) {
    res.send(item);
});

Wie kann ich mongodb abfragen, wobei sowohl der Feldname als auch sein Wert dynamisch bleiben?

78
WillMcavoy

Sie müssen den Schlüssel des Abfrageobjekts dynamisch festlegen:

var name = req.params.name;
var value = req.params.value;
var query = {};
query[name] = value;
collection.findOne(query, function (err, item) { ... });

Wenn Sie das tun {name: value}, der Schlüssel ist der String 'name' und nicht der Wert der Variablen name.

122
maxdec

Setzen Sie einfach die Variable in []

var name=req.params.name;
var value = req.params.value;
collection.findOne({[name]:value}, function(err, item) {
res.send(item);
});
49
KiwenLau

Ich möchte klarstellen, dass, wenn Sie versuchen, eine Abfrage nur für ein verschachteltes Feld (nicht für dessen Wert) durchzuführen, beispielsweise, wenn Sie das Feld "name" aus diesem Dokument abfragen möchten:

{
    loc: [0, 3],
    unit: {
        name : "playername"
    }
}

dies wird funktionieren (wie in meinem Fall - mit Update):

mdb.cords.updateOne(
    {_id: ObjectID(someid)}, 
    {$set: {[query]: newValue}}, 
    function (err, result) {
        ...
    }
}

Einfach beilegen [query] in Klammern weist Mongodb darauf hin, dass es sich nicht um ein Wort, sondern um einen Pfad handelt.

6
hydrix