【发布时间】:2014-09-16 21:31:34
【问题描述】:
我有一个 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});
谢谢
【问题讨论】:
-
结构对你没有帮助。 MongoDB 不能“遍历”这样命名的键,而不求助于 JavaScript 评估,这是一个相当慢的选择。您需要在此处更改您的架构,但这将有助于添加对所有这些字段应该表示的内容的一些解释。
-
是的,结构不是很好,但我无法改变它。我为项目所有者更改了标签,但前三层是年、月和日,更深的层是例如一些设备的名称、型号以及关于它们的负数和正数 cmets。
标签: node.js mongodb mongodb-query mongoskin