$ elem匹配不同

时间:2018-07-04 22:20:58

标签: mongodb distinct

我对不同的查询有一些疑问。

db.sessions.distinct("tests.device_serial")
[
        "",
        "5b34f4bf9854a",
        "5b34f4bf98664",
        "5b34f4bf98712",
        "5b34f4bf9876b",
        "5b34f4bf987c6"
]

我不想使用空字符串获取结果。我试图运行查询:

 db.sessions.distinct("tests.device_serial", {"tests.device_serial" : {$ne: ""}})
[ ]

为什么我有空数组?我的错误在哪里?

1 个答案:

答案 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"}
            }
        },
    ]
);