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

$elemMatch com distinto


Supondo que tests.device_serial seja uma matriz, aqui está o seu erro:
 db.sessions.distinct("tests.device_serial", {"tests.device_serial" : {$ne: ""}})

A consulta em seu comando distinto está filtrando documentos onde a matriz 'testa' contém um campo chamado device_serial com um valor de "", e não apenas os campos na matriz.

Para conseguir o que deseja, você pode usar a estrutura de agregação, desenrolar a matriz para vários documentos, filtrar e agrupar por nulo com um comando $addToSet para obter valores distintos.

Aqui está a consulta:
db.sessions.aggregate(
    [
        {
            $unwind: {
                path : "$tests"
            }
        },
        {
            $match: {
            "tests.device_serial":{$ne:""}
            }
        },
        {
            $group: {
              "_id":null,
                "device_serials":{$addToSet:"$tests.device_serial"}
            }
        },
    ]
);