2013-06-11 9 views
58

Ho questo dati in MongoDB:Come utilizzare una variabile come nome di campo in findOne() nativo di mongodb?

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

e voglio recuperare i dati durante il passaggio di un nome di campo come una variabile nella query.

seguente non funziona:

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

Come posso interrogare mongodb mantenendo sia il nome del campo e il suo valore dinamico?

+0

appena trovato questo post. Penso che questo sia davvero insicuro. Non pensi che dovresti disinfettare prima di usare quei valori in una query? – McStuffins

risposta

99

È necessario impostare la chiave del oggetto query in modo dinamico:

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

Quando si esegue {name: value}, la chiave è la stringa 'name' e non il valore della variabile name.

+0

GRAZIE !!! questo è fantastico !!! :) –

+0

Cosa fare se si desidera utilizzare operatori come $ gt all'interno della query? – Savvas

+0

Sostituisci 'valore' dalla tua query come' {$ gt: 50} ' – maxdec

3

vorrei chiarire che, se si sta cercando di fare una query riguardante un campo nidificato solo (non il suo valore), come se si vuole interrogare il campo "nome" da questo documento:

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

questo funzionerà (come nel mio caso - usando update):

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

semplicemente racchiudendo [query] tra parentesi dice MongoDB che non è letterale, ma piuttosto un percorso.

34

Basta mettere la variabile in []

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

La tua risposta è molto semplice! – user523234

+1

Questo non funziona come una query mongo diretta; si ottiene un errore di nuovo * E QUERY SyntaxError: token imprevisto [*. Non sono sicuro di come possa funzionare in node.js? –

+0

Penso che il motivo è che nodejs eseguirà la trasformazione quando interagisce con mongodb. – KiwenLau

Problemi correlati