MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

$elemMatch avec distinct

En supposant que tests.device_serial est un tableau, voici votre erreur :

 db.sessions.distinct("tests.device_serial", {"tests.device_serial" : {$ne: ""}})

La requête dans votre commande distincte filtre les documents où le tableau 'tests' contient un champ nommé device_serial avec une valeur de "", et pas seulement les champs du tableau.

Pour obtenir ce que vous voulez, vous pouvez utiliser le cadre d'agrégation, dérouler le tableau sur plusieurs documents, filtrer et grouper par null avec une commande $addToSet pour obtenir des valeurs distinctes.

Voici la requête :

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