tests.device_serialは配列だと思います、ここにあなたの間違いがあります:
db.sessions.distinct("tests.device_serial", {"tests.device_serial" : {$ne: ""}})
個別のコマンドでのクエリは、配列'tests'が含むドキュメントをフィルタリングすることです。 配列内のフィールドだけでなく、値が「」のdevice_serialという名前のフィールド。
必要なことを実現するには、集計フレームワークを使用し、配列を複数のドキュメントにアンワインドし、$ addToSetコマンドを使用してnullでフィルタリングおよびグループ化し、個別の値を取得します。
クエリは次のとおりです:
db.sessions.aggregate(
[
{
$unwind: {
path : "$tests"
}
},
{
$match: {
"tests.device_serial":{$ne:""}
}
},
{
$group: {
"_id":null,
"device_serials":{$addToSet:"$tests.device_serial"}
}
},
]
);