我有一个用例,在这个用例中,我必须根据特定日期以及该天之前的任何项目从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,则案例A应返回D,案例B应返回E。类似地,对于密钥2018-01-29 10:13:00,案例A应返回A和B,案例B应仅返回C。
发布于 2018-01-30 12:11:32
您需要查找所有小于输入时间的记录,并且应该在同一小时内,您可以尝试
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}]},
]
}
}
}
])https://stackoverflow.com/questions/48513627
复制相似问题