【问题标题】:filter data based on specific day and time from mongo collection from pool of datadifferent time on same day根据特定日期和时间从数据池中的 mongo 集合中过滤数据在同一天的不同时间
【发布时间】: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}})

标签: sql mongodb pymongo


【解决方案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,这将工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-03
  • 2021-08-22
  • 1970-01-01
  • 2021-07-22
  • 2020-09-09
  • 1970-01-01
  • 2020-12-16
相关资源
最近更新 更多