sql >> Database >  >> NoSQL >> MongoDB

MongoDB hoofdletterongevoelige index begint met prestatieproblemen

Edit:er is een werkbare oplossing. Als het woord dat u zoekt "bob" is, kunt u zoeken naar $lt:"boc", (waarbij u het laatste teken met één verhoogt) en $gte "bob". Dit zal de index gebruiken. Je kunt de volgende functie gebruiken die ik hieronder heb gemaakt (waarschuwing:het is niet per se bugvrij maar werkt vrijwel) als volgt:

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
        }
    }
}

Nou, het blijkt dat MongoDB het officieel niet ondersteunt! Ik heb een link gelegd naar een probleem in JIRA waar ze dit duidelijk maken. Dit maakt collaties helaas aanzienlijk minder nuttig. Laten we ervoor zorgen dat ze dit snel oplossen! Technisch gezien heb ik gemerkt dat hoewel het de index gebruikt, de index "[\"\", {})", gebruikt als een van zijn indexgrenzen, die altijd alle items in de index retourneert, dus de indexscan is nutteloos. De volgende fase van de zoekopdracht filtert die resultaten zoals normaal.

https://jira.mongodb.org/browse/DOCS-9933

Stem op dit probleem zodat ze het kunnen oplossen!https://jira.mongodb.org/ bladeren/SERVER-29865




  1. Kan geen bron uit de pool halen (SocketTimeoutException:)

  2. meteoor, mongodb, spatiebalken, hoe geef ik slechts 2 decimalen weer?

  3. heeft mijn meteor-app zowel MONGO_OPLOG_URL als MONGO_URL nodig?

  4. problemen om verbinding te maken met redis om bij meerdere worker-kues te passen