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"}
}
},
]
);