1

私は比較的 mongodb に慣れていませんが、データベースが既にセットアップされて実行されているこの会社のセットアップに入りました。この「配列」の構造は、実際には適切な配列ではないように見えます。彼らは私が必要とする情報を「offer_info_array」に保存しています。これには、レコード間で大きく変化する「オファーID」を持つネストされた配列があり、その中にネストされているのは、選択する必要がある情報です。以下は記録の一例です。

{
    "_id" : ObjectId("52041af3bbf8057203000004"),
    "offer_info_array" : {
        "128" : {
            "affid" : "68",
            "s1" : "YJF"
        }
    },
    "city" : "Cleveland",
    "state" : "OH",
    "zip" : "44111"
}

したがって、このようなレコードのデータベース全体から、「affid」が「68」であるすべてのレコードを見つける必要があります。このデータベースが正しく構造化されていないことはわかっていますが、すでに存在。「128」は、レコードごとに異なるオファー ID です。

誰かが洞察を持っていて、これについて私を助けることができれば、私はそれを大いに感謝します. ありがとうございました!

4

1 に答える 1

3

JavaScript 関数を受け入れる$where演算子を使用できます。

db.items.find({$where: function() { 
                         for(var key in obj.offer_info_array)
                             if(obj.offer_info_array[key].affid == 68)
                                return true;
                         return false; }})

この関数は、offer_info_arrayオブジェクトのプロパティを探し、キーでプロパティの値を取得します。次に、プロパティ値がaffid68 に等しいプロパティを持っているかどうかを確認します。そうであれば、trueどのオブジェクトがクエリに一致するかを返します。affid68 に等しいプロパティがない場合は、 を返しfalseます。

$where 演算子はインデックスを使用しないことに注意してください。

于 2013-08-08T23:23:32.950 に答える