0

次の形式でアイテムを格納するmongodbデータベースがあります。

{
"2013" : {
    "2" : {
        "1" : {
            "item1" : {
                "1" : {
                    "a_type" : 10,
                    "b_type" : 5,
                }
            },
            "item2" : {
                "v1" : {
                    "a_type" : 10,
                    "b_type" : 5,
                }
            },
        },
        "3" : {
            "item1" : {
                "1" : {
                    "a_type" : 10,
                    "b_type" : 5
                },
                "3" : {
                    "a_type" : 10,
                    "b_type" : 5
                }
            },
            "item2" : {
                "v1" : {
                    "a_type" : 10,
                    "b_type" : 5
                }
            },
        }
    }
}
"2014" : {
    "1" : {
        "5" : {
            "item1" : {
                "1" : {
                    "a_type" : 10,
                    "b_type" : 5
                }
            },
            "item2" : {
                "v2" : {
                    "a_type" : 10,
                    "b_type" : 5
                }
            },
        },     
    },
}
"_id" : ObjectId("53b82417a4b4939c27e300ed")
}

クエリを使用して、特定の日付の特定のアイテム データを取得したいと考えています。ハードコーディングで1日以上実行できますが、特定の日付とアイテム名が自動的に入力される配列を指定したいのですが、スタックとmongoドキュメントで1日以上検索しても見つかりませんでしたなんでも。これで私を助けてください。特定のアイテムと日付を取得するクエリは次のようになります。

db.collection(collectionName).findOne({}, {'2013.2.1.item1': 1, '2014.1.5.item2': 1},  function(err, res});

ありがとう

4

1 に答える 1

0

クエリ項目を含む配列が次のようになっていると想像してください。

 var query = ['2013.2.1', '2014.1.5'];

DB構造のため、MongoDBプロジェクションを使用してクエリ項目を抽出する必要があるため、次のようにする必要があります

var projectionObj = {};
for(var item in query) {
    projectionObj[item] = 1;
}

次のオブジェクトが生成されます。

{
    '2013.2.1': 1,
    '2014.1.5': 1
}

次に、次のように MongoDB find 関数に渡すことができます。

db.collection([collectionName]).find({}, projectionObj);

それはあなたが望むものを正確に返します。

于 2014-09-16T13:31:34.677 に答える