Đoán tests.device_serial là một mảng, đây là sai lầm của bạn:
db.sessions.distinct("tests.device_serial", {"tests.device_serial" : {$ne: ""}})
Truy vấn trong lệnh riêng biệt của bạn đang lọc tài liệu trong đó mảng 'kiểm tra' chứa một trường có tên device_serial với giá trị là "" và không chỉ các trường trong mảng.
Để đạt được những gì bạn muốn, bạn có thể sử dụng khung tổng hợp, giải phóng mảng cho nhiều tài liệu, lọc và nhóm theo null bằng lệnh $ addToSet để nhận các giá trị riêng biệt.
Đây là truy vấn:
db.sessions.aggregate(
[
{
$unwind: {
path : "$tests"
}
},
{
$match: {
"tests.device_serial":{$ne:""}
}
},
{
$group: {
"_id":null,
"device_serials":{$addToSet:"$tests.device_serial"}
}
},
]
);