MongoDB查找使用数组

时间:2013-06-07 00:31:17

标签: mongodb

我有一个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));

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

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

1 个答案:

答案 0 :(得分:2)

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

Collection.find(
    {"addr": {$in: data.devices.Controls}, "time": {$gte:d0, $lte:d1}}, ...