MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Regex kann nicht im $in-Operator in Mongodb verwendet werden

Sie müssen die Elemente im Array mit RegExp Objekt, also

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

Sie können den <-Code verwenden>map() -Methode, um die Elemente im Array mit den RegExp-Wrappern einem neuen Array zuzuordnen, das Sie dann in der Regex-Abfrage mit $in :

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

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

Verwenden von $in kann mit kleinen Arrays ziemlich effizient sein, aber nicht so gut mit riesigen Listen, da es im Index herumspringt, um die passenden Dokumente zu finden, oder die ganze Sammlung durchgeht, wenn es keinen zu verwendenden Index gibt.

Neben unter Verwendung von $in mit dem regulären Ausdruck , könnten Sie ein durch senkrechte Striche getrenntes Regex-Muster mit der Schlüsselwortliste wie folgt verwenden:

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

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