MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

incapaz de usar regex no operador $in no mongodb


Você precisa envolver os elementos na matriz com o RegExp objeto, ou seja

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

Você pode usar o map() método para mapear os elementos na matriz com os wrappers RegExp para uma nova matriz que você pode usar na consulta regex com $in :
var x = ["sai","test","jacob","justin"],
    regex = x.map(function (e) { return new RegExp(e, "i"); });

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

Usando $in pode ser bastante eficiente com matrizes pequenas, mas não tão bem com listas enormes, pois pulará o índice para encontrar os documentos correspondentes ou percorrerá toda a coleção se não houver um índice para usar.

Além de usando $in com a expressão regular , você pode usar um padrão regex delimitado por barra vertical com a lista de palavras-chave como esta:
var x = ["sai","test","jacob","justin"],
    regex = x.join("|");

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