MongoDB聚合:过滤器中的日期比较不起作用

时间:2020-07-07 12:53:04

标签: mongodb aggregation-framework

我需要使用以下命令获取一天中处理的日志和订单:

但是如果我使用$ 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"] }] 
                   } 
                 } 
               } 
            } 
    }

1 个答案:

答案 0 :(得分:1)

当您比较日期时,除非它们相同,否则不会发生匹配。

import control
import matplotlib
import numpy as np
import matplotlib.pyplot as plt
from collections import namedtuple

PlantFreqResp = namedtuple("PlantFreqResp", ["mag", "phase", "omega"])

s=control.tf([1,0],1)

freqs=np.logspace(-1,2,5)

# if you care about the formula names, use a dict
plant_formulas = [1/(s*s),                 # plant
    1/(s*s)*(1+1/10/s),                    # plant_PI
    1/(s*s)*(1+s/(1/3))/(1+s/(1*3))/3]     # plant_D
    
plant_freqs = [PlantFreqResp(*formula.freqresp(freqs)) 
    for formula in plant_formulas]

fig=plt.figure()
ax1=fig.add_subplot(2,1,1)
ax2=fig.add_subplot(2,1,2)

for freqs in plant_freqs:
    ax1.plot(freqs,np.squeeze((freqs.mag),axis=(3,)))
    ax2.plot(freqs,np.squeeze((i=freqs.phase),axis=(3,)))

plt.show()

即使这些日期实际上是相同的,相差1毫秒也足以使ISODate("2018-07-05T07:14:59.191+0000") ISODate("2018-07-05T07:14:59.192+0000") 运算符返回false。

如果您希望某天的所有$eq,您要做的就是使用$dayOfMonth之类的日期表达式进行匹配,如下所示:

orders

这将从下一年"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"}]} ] } } } } 的那一天开始下订单。