0

私は、(他のアイテムの中でも) タイムスタンプとデバイスの種類ごとのアドレスを含むドキュメントのリストを含む mongoDB コレクションを持っています。デバイスアドレスは 16 進数です (例: 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"])。

ただし、この検索ステートメントは、クエリからデータを返していないようです。エラーはありません(「データが見つかりません」というメッセージが表示されないため)...データが返されないようです。奇妙なことに、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 に答える