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")
}

我想通过我的查询在特定日期获取一些特定的项目数据。我可以用硬编码完成一天或更长时间,但我想给它一个数组,该数组将自动填充特定日期和项目名称,但在堆栈和 mongo 文档中搜索超过一天后我找不到任何事物。请帮我解决一下这个。获取一个特定项目和日期的查询如下:

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'];

由于您的数据库结构,您必须使用 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 回答