2013-06-11 9 views
58

mam te dane w MongoDB:Jak używać zmiennej jako nazwy pola w monopod-native findOne()?

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

i chcę odzyskać dane podczas przechodzenia nazwę pola jako zmiennej w zapytaniu.

Następujące nie działa:

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

Jak mogę kwerendy MongoDB Powadzimy nazwę pola i jego wartość dynamiczna?

+0

Wystarczy znaleźć tego postu. Myślę, że to jest naprawdę niepewne. Czy nie uważasz, że powinieneś odkażać przed użyciem tych wartości w zapytaniu? – McStuffins

Odpowiedz

99

Musisz ustawić klucz obiektu zapytania dynamicznie:

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

Kiedy robisz {name: value}, kluczem jest ciąg 'name' a nie wartość zmiennej name.

+0

DZIĘKUJEMY !!! to jest świetne!!! :) –

+0

Co jeśli chcesz użyć operatorów takich jak $ gt w zapytaniu? – Savvas

+0

Możesz zastąpić 'wartość' przez zapytanie, takie jak' {$ gt: 50} ' – maxdec

3

Chciałbym wyjaśnić, że jeśli starasz się zrobić kwerendę dotyczącą polu zagnieżdżonego tylko (nie jego wartości), jak jeśli chcesz zapytać polu „Nazwa” z tego dokumentu:

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

to zadziała (jak w moim przypadku - za pomocą aktualizacji):

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

Wystarczy załączając [query] w nawiasie informuje MongoDB, że nie jest dosłowny, ale raczej droga.

34

Wystarczy umieścić zmienną w []

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

Twoja odpowiedź jest bardzo prosta! – user523234

+1

To nie działa jako bezpośrednie zapytanie mongo; otrzymujesz błąd z powrotem * E QUERY SyntaxError: Nieoczekiwany token [*. Nie jestem pewien, jak to działa w node.js? –

+0

Myślę, że powodem jest to, że nodejs zrobi transformację, gdy wejdzie w interakcję z mongodb. – KiwenLau

Powiązane problemy