MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

$ elem Abbina con distinto

Indovinare test.device_serial è un array, ecco il tuo errore :

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

La query nel tuo comando distinto sta filtrando i documenti in cui l'array "test" contiene un campo denominato device_serial con un valore di "", e non solo i campi nell'array.

Per ottenere ciò che desideri, puoi utilizzare il framework di aggregazione, srotolare l'array su più documenti, filtrare e raggruppare per null con un comando $ addToSet per ottenere valori distinti.

Ecco la domanda:

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