我有一个用例,我必须在pymongo的mongo collection中根据特定日期和那天之前的任何项目过滤数据
前:
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.类似于Key 2018-01-29 10:13:00, CASE A应返回A和B,CASE B应仅返回C.
答案 0 :(得分:0)
你需要找到所有小于输入时间的记录,也应该在同一小时内,你可以尝试
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}]},
]
}
}
}
])