2013-06-11 7 views
58

मैं MongoDB में इस डेटा है:mongodb-native findOne() में फ़ील्ड नाम के रूप में चर का उपयोग कैसे करें?

{ 
    "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 का मान:

+0

बस इस पोस्ट पाया। मुझे लगता है कि यह वास्तव में असुरक्षित है। क्या आपको नहीं लगता कि आपको क्वेरी में उन मानों का उपयोग करने से पहले sanitize करना चाहिए? – McStuffins

उत्तर

99

आप क्वेरी वस्तु गतिशील के प्रमुख सेट करना होगा।

+0

आपको धन्यवाद !!! यह महान है!!! :) –

+0

क्या होगा अगर आप क्वेरी के अंदर $ gt जैसे ऑपरेटरों का उपयोग करना चाहते हैं? – Savvas

+0

आप अपनी क्वेरी द्वारा 'value' को प्रतिस्थापित करते हैं जैसे' {$ gt: 50} ' – maxdec

3

मैं स्पष्ट करने के लिए है कि आप एक नेस्टेड क्षेत्र केवल (नहीं उसका मान) के विषय में एक प्रश्न बनाने की कोशिश कर रहे हैं, जैसा कि आप इस दस्तावेज़ से क्षेत्र "नाम" क्वेरी करना चाहते हैं करना चाहते हैं:

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

इस (मेरे मामले में के रूप में - अद्यतन का उपयोग करके) काम करेगा:

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

सीधे शब्दों में कोष्ठक में [query] enclosing बताता MongoDB कि यह शाब्दिक नहीं है, बल्कि एक पथ।

34

बस [] में चर डाल

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

आपका उत्तर बहुत सीधी है! – user523234

+1

यह प्रत्यक्ष मोन्गो क्वेरी के रूप में काम नहीं करता है; आपको एक त्रुटि वापस मिलती है * ई QUERY सिंटेक्स त्रुटि: अप्रत्याशित टोकन [*। मुझे यकीन नहीं है कि यह node.js में कैसे काम कर सकता है? –

+0

मुझे लगता है कि कारण यह है कि जब यह mongodb के साथ बातचीत करता है तो नोडज परिवर्तन करेगा। – KiwenLau

संबंधित मुद्दे

 संबंधित मुद्दे