我对不同的查询有一些疑问。
db.sessions.distinct("tests.device_serial")
[
"",
"5b34f4bf9854a",
"5b34f4bf98664",
"5b34f4bf98712",
"5b34f4bf9876b",
"5b34f4bf987c6"
]
我不想使用空字符串获取结果。我试图运行查询:
db.sessions.distinct("tests.device_serial", {"tests.device_serial" : {$ne: ""}})
[ ]
为什么我有空数组?我的错误在哪里?
答案 0 :(得分:0)
猜测tests.device_serial是一个数组,这是您的错误:
db.sessions.distinct("tests.device_serial", {"tests.device_serial" : {$ne: ""}})
您的独特命令中的查询正在过滤文档,其中数组“测试” 包含一个名为device_serial且值为“”的字段,而不仅仅是数组中的字段。
要实现所需的功能,可以使用聚合框架,将数组展开为多个文档,使用$ addToSet命令以空过滤和分组以获取不同的值。
这是查询:
db.sessions.aggregate(
[
{
$unwind: {
path : "$tests"
}
},
{
$match: {
"tests.device_serial":{$ne:""}
}
},
{
$group: {
"_id":null,
"device_serials":{$addToSet:"$tests.device_serial"}
}
},
]
);