gpt4 book ai didi

python - 每个文档中 ISODate 之间的差异?

转载 作者:行者123 更新时间:2023-11-30 23:38:52 25 4
gpt4 key购买 nike

是否可以计算文档中两个日期之间的差异服务器端,并对其进行查询? (如SQL的DATEDIFF函数)

假设我有很多这样的文档:

>>> db.collection.find()
[
{ "id" : ObjectId("1"),
"starttime" : ISODate("2011-12-01T05:01:00"), # 5:01 AM
"endtime" : ISODate("2011-12-01T05:02:00") # 5:02 AM
},

{ "id" : ObjectId("2"),
"starttime" : ISODate("2011-12-01T06:01:00"), # 6:01:00 AM
"endtime" : ISODate("2011-12-01T06:01:30") # 6:01:30 AM
}
]

有没有办法实现类似的效果?

返回时差:

>>> db.collection.date_difference_seconds(endtime, starttime)
[60, 30]

或查询:

>>> db.collection.find("timediff(endtime-starttime) < 40 seconds")
[
{ "id" : ObjectId("2"), ...} # Just second document (30s diff)
]

我读过server-side JS和 eval(),但文档说不推荐这些 - 它们是最好的选择吗?

<小时/>

(我显然可以添加以秒为单位的时间差作为附加字段("time_diff": 30),或者计算Python客户端中的差异,但我想知道是否可能是服务器端)

客户端计算:

>>> for doc in (collection.find(None, {'starttime': 1, 'endtime': 1 }))
doc['endtime']-doc['startime']
0:01:00.000000
0:00:30.000000

最佳答案

正如 Sammaye 所建议的,我认为唯一的方法是使用aggregate() 函数。例如,执行以下操作:

db.collection.aggregate([{$project: {timediff: {$subtract: ['$endtime' , '$starttime']}}}])

您实际上是在定义一个新的运行时字段“timediff”,它是根据现有数据计算得出的。然后,您应该能够向管道添加 $match 步骤来过滤差异:

db.collection.aggregate([{$project: {timediff: {$subtract: ['$endtime' , '$starttime']}}}, {$match: {timediff: {$lte: 40}}}])

我还没有尝试过这个具体的例子,所以可能缺少一些大括号或方括号......但希望你能明白。聚合框架在您可以定义的数据管道方面非常强大。

祝你好运!

关于python - 每个文档中 ISODate 之间的差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14071466/

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