gpt4 book ai didi

mongodb - 查询日期范围的最佳 NoSql?

转载 作者:IT王子 更新时间:2023-10-29 05:58:55 28 4
gpt4 key购买 nike

给定一个商店,它是 JSON 文档的集合,其(近似)形式为:

{
PeriodStart: 18/04/2011 17:10:49
PeriodEnd: 18/04/2011 17:15:54
Count: 12902
Max: 23041 Min: 0
Mean: 102.86 StdDev: 560.97
},
{
PeriodStart: 18/04/2011 17:15:49
PeriodEnd: 18/04/2011 17:20:54
Count: 10000
Max: 23041 Min: 0
Mean: 102.86 StdDev: 560.97
}... etc

如果我想查询给定日期范围内的集合(比如过去 24 小时内的所有文档),哪种查询操作最简单?

进一步详细说明要求:

  • 它用于应用程序监控服务,因此不一定需要严格的 CAP/ACID
  • 性能也不是主要考虑因素。读/写最多每秒 10 秒,无论如何都可以由 RDBMS 处理
  • 希望能够处理不断变化的文档架构
  • 易于查询列表/集合的能力很重要(临时查询是一个优势)

最佳答案

我可能没有准确记下您的查询要求,因为您没有指定。但是,如果您需要查找在特定范围内开始或结束的任何文档,那么您可以应用下面写的大部分内容。如果那不是您想要的,我可以提供更多指导,从而更有帮助。 :)

如果您使用 CouchDB,您可以通过将日期的各个部分拆分成一个数组来创建索引。 ([年、月、日、时、分、秒...])

您的 map 功能可能类似于:

function (doc) {
var date = new Date(doc.PeriodStart);
emit([ date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes() ] , null]);
}

要执行任何类型的范围查询,您需要将开始时间和结束时间转换为相同的数组结构。从那里,您的 View 查询将具有名为 startkeyendkey 的参数。他们将分别接收开始和结束的数组参数。

因此,要查找过去 24 小时内开始的文档,除了 View 本身的完整 URI 之外,您还需要发送这样的查询字符串:

// start: Apr 17, 2011 12:30pm ("24 hours ago")
// end: Apr 18, 2011 12:30pm ("today")
startkey=[2011,04,17,12,30]&endkey=[2011,04,18,12,30]

或者如果您想要今年的所有内容:

startkey=[2011]&endkey=[2011,{}]

记下{}。当用作结束键时:[2011,{}] 在整理 View 时与 [2012] 相同。 (任何一种格式都可以)

阵列的额外组件将被简单地忽略,但您向阵列添加的特异性越强,您的范围就越具体。如果您添加 group_level 参数,那么在这里添加 reduce 函数真的很强大,但这超出了您的问题范围。

关于mongodb - 查询日期范围的最佳 NoSql?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5706104/

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