我有一个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});
由于
答案 0 :(得分: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);
它将完全返回您想要的内容。