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

Consulta do MongoDB $in com matriz regex de elemento


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 usar $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:

Documentos de teste:
db.papertest.insert([
    { category: "ad bd cd" },
    { category: "dd ed fd" },
    { category: "gd hd id" },
    { category: "jd kd ld" },
    { category: "md nd od" },
    { category: "pd qd rd" },
    { category: "sd td ud" },
    { category: "vd wd xd yd zd" },
]);

A mágica:
var keywords = ["xd", "sd", "ad"],
    regex = keywords.join("|");

db.papertest.find({
    "category": {
        "$regex": regex, 
        "$options": "i"
    } 
});

Os resultados
{ "_id" : ObjectId("56bb6f171bb4f693057c0ba4"), "category" : "ad bd cd" }
{ "_id" : ObjectId("56bb6f171bb4f693057c0baa"), "category" : "sd td ud" }
{ "_id" : ObjectId("56bb6f171bb4f693057c0bab"), "category" : "vd wd xd yd zd" }