अनुमान लगाना test.device_serial एक सरणी है, यह आपकी गलती है:
db.sessions.distinct("tests.device_serial", {"tests.device_serial" : {$ne: ""}})
आपके विशिष्ट आदेश में क्वेरी उन दस्तावेज़ों को फ़िल्टर कर रही है जहाँ सरणी 'परीक्षण' शामिल है डिवाइस_सीरियल नाम की एक फ़ील्ड जिसका मान "" है, न कि केवल सरणी में फ़ील्ड।
आप जो चाहते हैं उसे प्राप्त करने के लिए, आप अलग-अलग मान प्राप्त करने के लिए $addToSet कमांड के साथ एकत्रीकरण ढांचे का उपयोग कर सकते हैं, एकाधिक दस्तावेज़ों में सरणी खोल सकते हैं, फ़िल्टर और समूह को शून्य कर सकते हैं।
ये रही क्वेरी:
db.sessions.aggregate(
[
{
$unwind: {
path : "$tests"
}
},
{
$match: {
"tests.device_serial":{$ne:""}
}
},
{
$group: {
"_id":null,
"device_serials":{$addToSet:"$tests.device_serial"}
}
},
]
);