0

我有一个 mongoDB 集合,其中包含一个文档列表,其中包含(除其他项目外)每种不同类型设备的时间戳和地址。设备地址为十六进制(例如 0x1001、0x2001、0x3001 等)。

在服务器端,我正在尝试查询集合以查看特定日期范围内存在哪些文档,以及设备列表

Collection.find(
    {"addr": data.devices.Controls, "time": {$gte:d0, $lte:d1}},{},
    function (err, docs) {
        if( err|| !docs) console.log("No data found");
        else {
            //I've simplified the code here...
        }
    }
);

d0 和 d1 是我的开始和结束日期......而 data.devices.Controls 是设备地址列表。如果我添加该行:

console.log("Controls: " + JSON.stringify(data.devices.Controls));

我可以在服务器端看到它打印出我正在寻找的地址列表(实际的打印语句如下所示:Controls:[“0x1001”,“0x2001”,“0x3001”]。)

但是,这个 find 语句似乎没有从查询中返回任何数据。没有错误(因为我没有看到“未找到数据”消息)......它似乎没有返回任何数据。奇怪的是,如果我从 Controls 数组中指定一个特定元素(类似于 data.devices.Controls[0]...),那么它就可以正常工作。我可以指定数组中的任何元素并且它可以工作......但是通过在参数中传递整个数组,它似乎不起作用。有谁知道为什么会发生这种情况(以及如何解决它)?

4

1 回答 1

2

您需要使用$in运算符来匹配值数组;像这样:

Collection.find(
    {"addr": {$in: data.devices.Controls}, "time": {$gte:d0, $lte:d1}}, ...
于 2013-06-07T01:05:58.400 回答