各文件中等值线之间的差异?

2024-04-26 21:24:48 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

>>> 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 
    }
]

有没有办法实现类似的目标?在

只返回时差:

^{pr2}$

或查询:

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

我读过server-side JSeval(),但是文档说不推荐使用它们-它们是最好的选择吗?在


(很明显,我可以将以秒为单位的时间差作为一个附加字段("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

Tags: 文档id客户端dbdoc服务器端diff差异
1条回答
网友
1楼 · 发布于 2024-04-26 21:24:48

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

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

实际上,您定义了一个新的运行时字段“timediff”,它是根据现有数据计算出来的。然后,您应该能够将$match步骤添加到管道中,以根据差异进行筛选:

^{pr2}$

我没有尝试过这个具体的例子,所以可能会缺少一些大括号或括号…但希望你能理解这个想法。就您可以定义的数据管道而言,聚合框架非常强大。在

祝你好运!在

相关问题 更多 >