如何在mongodb中检查日期$ gte是否为'dd.mm.YYYY'日期格式

时间:2019-11-30 13:44:42

标签: mongodb

我想要deliveryDate大于等于当前日期但在mongodb中不起作用的数据。我的deliveryDate以“ 11.8.2018”这种格式存储。

collection.aggregate([
{
  $match: {"deliveryDate" : { $gte: new Date(new Date().setDate(new.  Date().getDate()-2)) }
},{
 $group: {
      _id:{
           year: { $year: "$createdDate" },
           month: { $month: "$createdDate" },
           day: { $dayOfMonth: "$createdDate" },
           time: { $dateToString: { format: "%H:%M:%S:%L", date: "$createdDate" }},
           partialAmount : "$partialAmount",
           balanceAmount : "$balanceAmount"
         }
      }
 },
])}  

但是如果我给定创建日期而不是deliveryDate,那么这是行不通的,但是我想根据deliveryDate要求它们。

1 个答案:

答案 0 :(得分:0)

请考虑以下两个输入文档:

{ deliveryDate: "11.8.2018" }
{ deliveryDate: "11.12.2019" }

使用以下汇总阶段,您可以过滤交货日期大于今天的日期的文档。

db.test.aggregate( [ 
{ 
  $addFields: { deliveryDate: { $dateFromString: { dateString: "$deliveryDate", format: "%d.%m.%Y" } } }
},
{
  $match: { deliveryDate: { $gte: ISODate() } }
}
] )

仅具有deliveryDate: "11.12.2019"的文档将被匹配(因为它大于今天的 2019年11月30日日期)。


-或-

您可以将expr$match配合使用以下查询过滤器。日期比较的结果将是相同的。

var deliveryDtFilter = { $cond: {
                            if: { $gte: [ { $dateFromString: { dateString: "$deliveryDate", format: "%d.%m.%Y" } }, 
                                           ISODate() 
                                        ] 
                                 },
                             then: true,
                             else: false
                         }
};

db.test.aggregate( [ 
{
  $match: { $expr: { $eq: [ deliveryDtFilter,  true ] } }
}
] )