sql >> Databáze >  >> NoSQL >> MongoDB

nelze použít regulární výraz v operátoru $in v mongodb

Prvky v poli musíte zabalit pomocí RegExp objekt, tj.

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

Můžete použít map() metoda k mapování prvků v poli s obaly RegExp na nové pole, které pak můžete použít v dotazu na regulární výraz pomocí $in :

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

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

Pomocí $in může být poměrně efektivní s malými poli, ale ne tak dobře s velkými seznamy, protože bude přeskakovat v indexu, aby našel odpovídající dokumenty, nebo projde celou kolekci, pokud neexistuje index, který by se dal použít.

Kromě pomocí $in s regulárním výrazem , můžete použít vzor regulárního výrazu odděleného svislou čarou se seznamem klíčových slov takto:

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

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


  1. Node.js:Dokument vrací nedefinovaný – Mongoose

  2. Jak se připojit ke dvěma dalším kolekcím s podmínkami

  3. Mongoose dotaz vrací hodnotu null

  4. Jak aktualizovat dokumenty MongoDB pomocí polí dílčích dokumentů