sql >> Databasteknik >  >> NoSQL >> MongoDB

kan inte använda regex i $in-operatorn i mongodb

Du måste slå in elementen i arrayen med RegExp objekt, dvs.

regex =[nytt RegExp("sai", "i"), nytt RegExp("test", "i"),...]

Du kan använda map() metod för att mappa elementen i arrayen med RegExp-wrappers till en ny array som du sedan kan använda i regex-frågan med $in :

var x = ["sai","test","jacob","justin"],
    regex = x.map(function (e) { return new RegExp(e, "i"); });

db.users.find({"profile.firstName": { "$in": regex } });

Använder $in kan vara ganska effektivt med små arrayer men inte så bra med enorma listor eftersom det kommer att hoppa runt i indexet för att hitta matchande dokument, eller gå igenom hela samlingen om det inte finns ett index att använda.

Förutom använda $in med det reguljära uttrycket , kan du använda ett röravgränsat regexmönster med sökordslistan så här:

var x = ["sai","test","jacob","justin"],
    regex = x.join("|");

db.users.find({
    "profile.firstName": {
        "$regex": regex, 
        "$options": "i"
    } 
}).count;


  1. Vad är returtyp av db.collection.find() i mongodb

  2. java - MongoDB + Solr föreställningar

  3. MongoDB toArray-prestanda

  4. Hur ser man vilka frågor som använder ett index i MongoDB?