gpt4 book ai didi

java - mongodb 查询嵌入式文档键作为日期

转载 作者:可可西里 更新时间:2023-11-01 10:44:21 24 4
gpt4 key购买 nike

这是我的带有嵌入式文档的 mongodb 文档。 “事件”是一个文档列表 (BasicDBList),其中每个文档都以某个日期(例如 2013 年 1 月 1 日)作为键存储,值是一堆字段。结构是这样定义的,所以我可以得到在某个日期发生的所有事件(例如 2013 年 1 月 1 日)。

我有两个问题:

  1. 是否有更好的方法来构建此文档?我不确定关键作为约会是个好主意,但与此同时我想轻松检索所有文档并根据日期将它们存储在内存中。什么时候我检索文档,我想要一个以键为日期和值的哈希表作为该日期的文档列表(使用 Java)。

  2. 如何通过传递日期来检索文档?例如,我想要键为 2013 年 1 月 1 日的所有文档。查询是什么在 Java 中?



{
“_ID”: {
“_time”:1367928493,
“_机器”:-1914548796,
“_inc”:-1784811303,
“_new”:假
},
“电子邮件”:“xyz@yahoo.com”,
“事件”:{
“2013 年 1 月 1 日”:[
{
"desc": "我的描述",
"title": "我的标题",
"createDateTime": "2013 年 5 月 7 日上午 8:08:13",
"updateDateTime": "2013 年 5 月 7 日上午 8:08:13"
},
{
"desc": "我的 Desc2",
"title": "我的标题2",
"createDateTime": "2013 年 5 月 7 日上午 8:08:13",
"updateDateTime": "2013 年 5 月 7 日上午 8:08:13"
}
],
“2013 年 2 月 1 日”:[
{
"desc": "我的 Desc3",
"title": "我的标题3",
"createDateTime": "2013 年 5 月 8 日上午 8:08:13",
"updateDateTime": "2013 年 5 月 7 日上午 8:08:13"
},
{
"desc": "我的 Desc3",
"title": "我的标题3",
"createDateTime": "2013 年 5 月 8 日上午 8:08:13",
"updateDateTime": "2013 年 5 月 8 日上午 8:08:13"
}
]
}
}

谢谢

最佳答案

通常情况下,不允许通过 json 键进行查询,但可以使用此技巧:

db.things.find( { key : { $exists : true } } );

此查询是查找具有特定键的文档

但是,我认为这不是解决问题的最佳方法。首先,文档的events对象似乎会在未来不可预测地增长,这是我们在设计schema时应该避免的,因为随着文档的增长,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"
}
]
}

关于java - mongodb 查询嵌入式文档键作为日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16450671/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com