संपादित करें:एक व्यावहारिक कामकाज है। मूल रूप से यदि आप जिस शब्द को खोज रहे हैं वह "बॉब" है, तो आप $lt:"boc", (जहां आप अंतिम वर्ण को एक से बढ़ाते हैं), और $gte "bob" खोज सकते हैं। यह सूचकांक का उपयोग करेगा। आप नीचे दिए गए निम्नलिखित फ़ंक्शन का उपयोग कर सकते हैं (चेतावनी यह जरूरी नहीं कि बग मुक्त हो लेकिन बहुत अधिक काम करता है) इस तरह:
var searchCriteria = {};
addStartsWithQuery(searchCriteria, "firstName", "bo");
People.find(searchCriteria).then(...);
//searchCriteria will be
/*
{
$and:[
{firstName:{$gte:"bo"}},
{firstName:{$lt:"bp"}}
]
}
*/
//now library functions that will automatically generate the correct query and add it to `searchCriteria`. Of course for complicated queries you may have to modifiy it a bit.
function getEndStr(str) {
var endStrArr = str.toLocaleLowerCase('en-US').split("");
for (var i = endStrArr.length - 1; i >= 0; --i) {
var lastChar = endStrArr[i];
if(lastChar === "z"){
return endStrArr.join("") + "zzzzzzzzzzzz";
}
var nextChar = String.fromCharCode(lastChar.charCodeAt(0) + 1);
if (nextChar === ":")
nextChar = "a";
if (nextChar !== false) {
endStrArr[i] = nextChar;
return endStrArr.join("");
}
endStrArr.pop();
}
}
function addStartsWithQuery(searchCriteria, propertyName, str) {
if (!(typeof str === 'string') || !str.length)
return;
var endStr = getEndStr(str);
if (endStr) {
if (!searchCriteria.$and)
searchCriteria.$and = [];
searchCriteria.$and.push({
[propertyName]: {
$gte: str
}
});
searchCriteria.$and.push({
[propertyName]: {
$lt: endStr
}
});
} else {
searchCriteria[propertyName] = {
$gte: str
}
}
}
वैसे यह पता चला है कि MongoDB आधिकारिक तौर पर इसका समर्थन नहीं करता है! मैं जिरा में एक मुद्दे से जुड़ा हूं जहां वे इसे स्पष्ट करते हैं। यह दुर्भाग्य से कॉलेशन को काफी कम उपयोगी बनाता है। आइए इसे जल्द ही ठीक करने के लिए उनसे मिलें! तकनीकी रूप से, मैंने देखा कि भले ही यह सूचकांक का उपयोग कर रहा हो, सूचकांक "[\"\", {})",
का उपयोग करता है इसकी अनुक्रमणिका सीमाओं में से एक के रूप में, जो हमेशा अनुक्रमणिका में सभी आइटम लौटाता है, इसलिए अनुक्रमणिका स्कैन बेकार है। क्वेरी का अगला चरण सामान्य की तरह उन परिणामों को फ़िल्टर करता है।
https://jira.mongodb.org/browse/DOCS-9933
इस समस्या को ठीक करने के लिए वोट करें!https://jira.mongodb.org/ ब्राउज़/सर्वर-29865