Raden dat tests.device_serial een array is, dit is je fout:
db.sessions.distinct("tests.device_serial", {"tests.device_serial" : {$ne: ""}})
Query in uw distinct-commando is het filteren van documenten waar de array 'tests' bevat een veld met de naam device_serial met de waarde "", en niet alleen de velden in de array.
Om te bereiken wat je wilt, kun je een aggregatieraamwerk gebruiken, array afwikkelen naar meerdere documenten, filteren en groeperen op null met een $addToSet-opdracht om verschillende waarden te krijgen.
Hier is de vraag:
db.sessions.aggregate(
[
{
$unwind: {
path : "$tests"
}
},
{
$match: {
"tests.device_serial":{$ne:""}
}
},
{
$group: {
"_id":null,
"device_serials":{$addToSet:"$tests.device_serial"}
}
},
]
);