MongoDB聚合:筛选器中的日期比较不起作用

MongoDB聚合:筛选器中的日期比较不起作用,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我需要使用以下工具在一天内处理日志和订单: 但是如果我使用$eq,结果总是返回空的。但是如果我使用$gte进行日期比较($$order.LogDate),那么我会得到订单计数。但匹配数据在数据库中可用。知道我哪里做错了吗?我还尝试使用$gte和$lte,日期和日期+1天。还是不走运: { "_id" : 0, "FirstName" : { "$arrayElemAt" : ["$drivers.FirstName

我需要使用以下工具在一天内处理日志和订单:

但是如果我使用$eq,结果总是返回空的。但是如果我使用$gte进行日期比较($$order.LogDate),那么我会得到订单计数。但匹配数据在数据库中可用。知道我哪里做错了吗?我还尝试使用$gte和$lte,日期和日期+1天。还是不走运:

{ 
  "_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"}]}
                ]
            }
        }
    }
}