MongoDB聚合:筛选器中的日期比较不起作用
我需要使用以下工具在一天内处理日志和订单: 但是如果我使用$eq,结果总是返回空的。但是如果我使用$gte进行日期比较($$order.LogDate),那么我会得到订单计数。但匹配数据在数据库中可用。知道我哪里做错了吗?我还尝试使用$gte和$lte,日期和日期+1天。还是不走运:MongoDB聚合:筛选器中的日期比较不起作用,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我需要使用以下工具在一天内处理日志和订单: 但是如果我使用$eq,结果总是返回空的。但是如果我使用$gte进行日期比较($$order.LogDate),那么我会得到订单计数。但匹配数据在数据库中可用。知道我哪里做错了吗?我还尝试使用$gte和$lte,日期和日期+1天。还是不走运: { "_id" : 0, "FirstName" : { "$arrayElemAt" : ["$drivers.FirstName
{
"_id" : 0,
"FirstName" : { "$arrayElemAt" : ["$drivers.FirstName", 0] },
"LastName" : { "$arrayElemAt" : ["$drivers.LastName", 0] },
"PhoneNumber" : { "$arrayElemAt" : ["$drivers.ContactNo", 0] },
"LogDate" : "$_id.LogDate",
"LogDateEnd":{ $add: [ "$_id.LogDate", 86400000 ] },
"TotalMinutes" : "$TotalMinutes",
"OrderCount" : {
"$size" : {
"$filter" : {
"input" : "$orders",
"as":"order",
"cond" : {
"$and" : [{ "$eq" : ["$$order.OrderStatus", "COMPLETE"] },{ "$eq" : ["$$order.LogDate", "$LogDate"] }]
}
}
}
}
}
当您比较日期时,除非它们相同,否则不会出现匹配
ISODate("2018-07-05T07:14:59.191+0000")
ISODate("2018-07-05T07:14:59.192+0000")
尽管这些日期实际上是相同的,但1毫秒的差异足以使$eq
运算符返回false
在您的情况下,您需要某一天的所有订单。您只需使用如下日期表达式进行匹配:
这将从$logDate
所在的一年中的某一天开始保留订单。您能给我们看一个示例文档或可复制的场景吗?您好,将$logDate传递给$and或内部时,我收到以下错误“errmsg”:“无法从BSON类型转换为缺少日期”我只是假设logDate
是一个date
类型字段,但这个错误表明它不是,您应该使用您确实拥有的date
字段(LogDateEnd
?)。实际上logDate是一个类型ISODate“BSON type missing
”,即该字段缺失。不管怎样,它都不是date
类型。谢谢您的帮助。问题是我必须传递“_id.LogDate”,而不是LogDate,它是上面的计算值。
"OrderCount": {
"$size": {
"$filter": {
"input": "$orders",
"as": "order",
"cond": {
"$and": [
{"$eq": ["$$order.OrderStatus", "COMPLETE"]},
{"$eq": [{$year: "$$order.LogDate"}, {$year: "$LogDate"}]},
{"$eq": [{$month: "$$order.LogDate"}, {$month: "$LogDate"}]},
{"$eq": [{$dayOfMonth: "$$order.LogDate"}, {$dayOfMonth: "$LogDate"}]}
]
}
}
}
}