我想要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要求它们。
答案 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 ] } }
}
] )