这是我的mongodb文档,带有嵌入式文档。 “事件”是文档列表(BasicDBList),其中每个文档与密钥一起存储为某个日期(例如2013年1月1日),值是一堆字段。结构以这种方式定义,因此我可以在某个日期(例如2013年1月1日)发生所有事件。
我有两个问题:
是否有更好的方法来构建此文档?我不确定关键 作为约会是一个好主意,但同时我想 轻松检索所有文档并根据日期将它们存储在内存中。什么时候 我检索文档,我想要一个带密钥的Hashtable作为日期和值 作为该日期的文件清单(使用Java)。
如何通过传递日期来检索文档?例如,我想要 所有带密钥的文件都是2013年1月1日。查询是什么 在Java?
{
"_id": {
"_time": 1367928493,
"_machine": -1914548796,
"_inc": -1784811303,
"_new": false
},
"email": "xyz@yahoo.com",
"events": {
"Jan 1, 2013": [
{
"desc": "My Desc",
"title": "My Title",
"createDateTime": "May 7, 2013 8:08:13 AM",
"updateDateTime": "May 7, 2013 8:08:13 AM"
},
{
"desc": "My Desc2",
"title": "My Title2",
"createDateTime": "May 7, 2013 8:08:13 AM",
"updateDateTime": "May 7, 2013 8:08:13 AM"
}
],
"Feb 1, 2013": [
{
"desc": "My Desc3",
"title": "My Title3",
"createDateTime": "May 8, 2013 8:08:13 AM",
"updateDateTime": "May 7, 2013 8:08:13 AM"
},
{
"desc": "My Desc3",
"title": "My Title3",
"createDateTime": "May 8, 2013 8:08:13 AM",
"updateDateTime": "May 8, 2013 8:08:13 AM"
}
]
}
}
{
"_id": {
"_time": 1367928493,
"_machine": -1914548796,
"_inc": -1784811303,
"_new": false
},
"email": "xyz@yahoo.com",
"events": {
"Jan 1, 2013": [
{
"desc": "My Desc",
"title": "My Title",
"createDateTime": "May 7, 2013 8:08:13 AM",
"updateDateTime": "May 7, 2013 8:08:13 AM"
},
{
"desc": "My Desc2",
"title": "My Title2",
"createDateTime": "May 7, 2013 8:08:13 AM",
"updateDateTime": "May 7, 2013 8:08:13 AM"
}
],
"Feb 1, 2013": [
{
"desc": "My Desc3",
"title": "My Title3",
"createDateTime": "May 8, 2013 8:08:13 AM",
"updateDateTime": "May 7, 2013 8:08:13 AM"
},
{
"desc": "My Desc3",
"title": "My Title3",
"createDateTime": "May 8, 2013 8:08:13 AM",
"updateDateTime": "May 8, 2013 8:08:13 AM"
}
]
}
}
谢谢
答案 0 :(得分:1)
通常,不允许您通过json密钥进行查询,但您可以使用此技巧:
db.things.find( { key : { $exists : true } } );
此查询是查找具有特定密钥的文档
但是,我认为这不是解决问题的最佳方法。首先,文档的事件对象似乎将来会变得无法预测,这是我们在设计模式时应该避免的,因为随着文档的增长,mongodb必须重新定位磁盘空间来存储它,这将导致性能问题。
我建议将事件对象存储在单独的集合中,“所有者”和“日期”字段是您要查询的字段。
{
"owner":"xyz@yahoo.com",
"date":"Jan 1, 2013",
"events":[
{
"desc": "My Desc",
"title": "My Title",
"createDateTime": "May 7, 2013 8:08:13 AM",
"updateDateTime": "May 7, 2013 8:08:13 AM"
}
]
}