sql >> Database teknologi >  >> NoSQL >> MongoDB

ude af stand til at bruge regex i $in operator i mongodb

Du skal pakke elementerne i arrayet med RegExp objekt, dvs.

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

Du kan bruge map() metode til at kortlægge elementerne i arrayet med RegExp-indpakningerne til et nyt array, som du derefter kan bruge i regex-forespørgslen 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 } });

Brug af $in kan være ret effektivt med små arrays, men ikke så godt med store lister, da det vil springe rundt i indekset for at finde de matchende dokumenter, eller gå gennem hele samlingen, hvis der ikke er et indeks at bruge.

Udover brug af $in med det regulære udtryk , kan du bruge et rørsepareret regex-mønster med søgeordslisten som denne:

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

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


  1. Indeks på ts felt i oplog.rs er ikke opdateret

  2. mislykkedes med fejl 10068:ugyldig operator:$oid

  3. Sådan kodes MongoDB foreach Query i PHP

  4. MongoDb-besparelse kaster fejl for PHP-klassens private medlemmer