MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

$elemMatch mit eindeutig

Erraten Sie, dass tests.device_serial ein Array ist, hier ist Ihr Fehler:

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

Die Abfrage in Ihrem Distinct-Befehl filtert Dokumente, in denen das Array 'tests' enthält ein Feld namens device_serial mit einem Wert von "", und nicht nur die Felder in array.

Um das zu erreichen, was Sie wollen, können Sie das Aggregations-Framework verwenden, das Array auf mehrere Dokumente auflösen, mit einem $addToSet-Befehl nach Null filtern und gruppieren, um unterschiedliche Werte zu erhalten.

Hier ist die Abfrage:

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