एक शब्द के माध्यम से खोजने के लिए, संग्रह में मौजूद सभी उत्पादों में विवरण फ़ील्ड में वह शब्द शामिल है, आपको केस असंवेदनशीलता के साथ एक रेगेक्स मैच की आवश्यकता है। आप निम्न क्वेरी का उपयोग कर सकते हैं (उदाहरण के तौर पर):
db.product.find({"data.description": /test/i});
जहां i
/test/i
. में केस असंवेदनशीलता को इंगित करता है, इस प्रकार रेगेक्स स्ट्रिंग के साथ किसी भी टेक्स्ट के लिए विवरण फ़ील्ड पर मेल खाता है "test"
. समतुल्य SQL व्यंजक इस प्रकार है:
select * from product where description like '%test%'
तो आप ढूंढें ()
findOne()
जो सिर्फ एक दस्तावेज़ लौटाता है:
app.get("/description/:id", auth, function(req, res, next) {
req.collection.find({
"data.description": /req.params.id/i
}, function(e, result) {
if(e) return next(e);
res.send(result);
});
});
एक अन्य विकल्प $textका उपयोग करना है कोड>
ऑपरेटर आपके खोज ऑपरेशन में है क्योंकि यह टेक्स्ट इंडेक्स के साथ अनुक्रमित फ़ील्ड की सामग्री पर टेक्स्ट खोज करता है। तो पहली चीज जो आप करेंगे वह है विवरण क्षेत्र पर एक टेक्स्ट इंडेक्स बनाना:
db.collection.createIndex( { "data.description": "text" } )
उसके बाद आप $text ऑपरेटर का उपयोग करके क्वेरी कर सकते हैं। उदाहरण के लिए, निम्न क्वेरी कॉफ़ी शब्द की खोज करती है:
db.collection.find( { $text: { $search: "coffee" } } )
संपादित करें :
सभी चीजें समान होने के कारण, आप इसके बजाय URL में क्वेरी स्ट्रिंग्स का उपयोग करने के लिए अपने रूट कार्यान्वयन को अपडेट कर सकते हैं:
app.get("/description", auth, function(req, res, next) {
req.collection.find({
$text: { $search: req.params.q }
}, function(e, result) {
if(e) return next(e);
res.send(result);
});
});
जिसे आप अपने ब्राउज़र में http://localhost/description?q=product
. के रूप में क्वेरी कर सकते हैं