根据特定日期和时间从数据池中的 mongo 集合中过滤数据在同一天的不同时间

Posted

技术标签:

【中文标题】根据特定日期和时间从数据池中的 mongo 集合中过滤数据在同一天的不同时间【英文标题】:filter data based on specific day and time from mongo collection from pool of datadifferent time on same day 【发布时间】:2018-01-30 03:53:41 【问题描述】:

我有一个用例,我必须从 pymongo 中的 mongo 集合中根据特定日期和该时间之前的任何项目过滤数据

例如:

 A- 2018-01-29 10:01:00
 B- 2018-01-29 10:11:00
 C- 2018-01-29 10:23:00

 D- 2018-01-28 11:01:00
 E- 2018-01-28 11:04:00

我有过滤键 2018-01-29 10:24:00,那么我只需要返回 A、B 和 C。如果我有过滤键为 2018-01-28 11:05:00,那么我有只返回 D 和 E。如果我有条件 2018-01-29 10:13:00,那么我必须返回 A 和 B。如果我的过滤键为 2018-01-28 11:02:00,那么我只需要返回 D。扩展这一点,另一个条件是如果我的密钥为 2018-01-28 11:02:00,则 CASE A 应返回 D,CASE B 应返回 E。对于密钥 2018-01-29 10:13:00,同样如此, CASE A 应该返回 A 和 B,CASE B 应该只返回 C。

【问题讨论】:

为什么不只传递两个日期作为输入?一个在小时和其他日期的顶部,您可以尝试db.col.find(date:$gte:date1, $lte:date2) 【参考方案1】:

你需要找到所有小于输入时间的记录,也应该是同一时间,你可以试试

searchDate是日期条件

$date 来自集合

db.col.find(
    $expr : 
        $and : 
            [
                $lte: ["$date", searchDate], 
                $eq : [ $hour : "$date", $hour : searchDate],
                $eq : [ $dayOfMonth : "$date", $dayOfMonth : searchDate],
                $eq : [ $month : "$date", $month : searchDate],
                $eq : [ $year : "$date", $year : searchDate],
            ]
        
    
)

聚合管道

db.col.aggregate([
$match:
    $expr : 
        $and : 
            [
                $lte: ["$date", searchDate], 
                $eq : [ $hour : "$date", $hour : searchDate],
                $eq : [ $dayOfMonth : "$date", $dayOfMonth : searchDate],
                $eq : [ $month : "$date", $month : searchDate],
                $eq : [ $year : "$date", $year : searchDate],
            ]
        
    

])

【讨论】:

不是小时,是同一天,小于特定时间(包括小时、分钟和秒) 哦,不幸的是我们没有 trunc 在 mongo 中只获取日期,我们也可以在 $and 条件下添加日期月份年份 searchDate 可以是 2018-01-29 10:13:00 或者应该根据小时、月、日等拆分,对于特定的键?用过吗? @TechJump 应该是ISODate,您不是将日期存储为ISODate吗? 如果你有两个日期都是ISODates,这将工作

以上是关于根据特定日期和时间从数据池中的 mongo 集合中过滤数据在同一天的不同时间的主要内容,如果未能解决你的问题,请参考以下文章

mongo-> 如何从两个不同的集合中获取日期时间 desc 顺序的记录

Rmongodb 打包日期对象

如何查询将日期存储为某种格式的字符串的 mongo 集合?

Mongodb:从 mongo shell 中的 ObjectId 执行日期范围查询

Anylogic,根据特定条件从池中抢资源

如何根据ios中的特定键从数组中获取字典