gpt4 book ai didi

javascript - 从 MongoDB 中的一系列日期中查找缺失的日期

转载 作者:可可西里 更新时间:2023-11-01 09:32:46 25 4
gpt4 key购买 nike

我有一个集合,其中包含用于特定操作的serviceDate 字段。我需要在给定的日期范围内查找是否有任何 serviceDate 丢失,如果找到 serviceDate dates 的返回列表,则在 MongoDB 的日期范围内丢失。我的集合的示例 JSON 如下。

{
"_id" : ObjectId("5cefdb46bfbe1c0001f38413"),
"category" : "RENT",
"serviceDate" : ISODate("2019-06-15T05:30:00.000+05:30")
},


{
"_id" : ObjectId("5cefdb46bfbe1c0001f38412"),
"category" : "RENT",
"serviceDate" : ISODate("2019-06-14T05:30:00.000+05:30")
},


{
"_id" : ObjectId("5cefdb46bfbe1c0001f38411"),
"category" : "RENT",
"serviceDate" : ISODate("2019-06-13T05:30:00.000+05:30")
}

例子:
案例 1:如果一个集合有 10 个文档,并且 serciceDate 从 1-June-2019 到 10-June-2019。在我的查询中,我将 2019 年 6 月 4 日传递到 2019 年 6 月 7 日,结果应该为空。
案例 2:如果一个集合有 9 个文档,并且 serciceDate 从 1-June-2019 到 10-June-2019,但缺少 6-June-2019。在我的查询中,我将 2019 年 6 月 4 日传递到 2019 年 6 月 7 日,结果应该是 2019 年 6 月 6 日。
案例 3:如果一个集合有 9 个文档,并且 serciceDate 从 1-June-2019 到 10-June-2019,但 6-June-2019,则缺少 5-June-2019。在我的查询中,我将 2019 年 6 月 4 日传递到 2019 年 6 月 7 日,结果应该是 2019 年 6 月 6 日和 2019 年 6 月 5 日。

最佳答案

您需要先找到您在查询中传递的日期范围之间的所有日期。你必须使用一些 javascript 技巧。

function getDates(startDate, stopDate) {
var dateArray = []
var currentDate = moment(startDate)
var stopDate = moment(stopDate)
while (currentDate <= stopDate) {
dateArray.push(moment(currentDate).format('YYYY-MM-DD'))
currentDate = moment(currentDate).add(1, 'days')
}
return dateArray
}

const dateArray = getDates(startDate, startDate)

//Output will be something like
dateArray = [ "2018-09-01", "2018-09-02", "2018-09-03", "2018-09-04", "2018-09-05" ]

现在您可以使用聚合来查找 $setDifference获取不存在的 serviceDates

db.collection.aggregate([
{ '$match': {
'serviceDate': { '$gte': startDate, '$lte': endDate }
}},
{ '$group': {
'_id': null,
'dates': { '$push': { '$dateToString': { 'date': '$serviceDate', 'format': '%Y-%m-%d' }}}
}},
{ '$project': {
'missingDates': { '$setDifference': [dateArray, '$dates'] }
}}
])

关于javascript - 从 MongoDB 中的一系列日期中查找缺失的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56388708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com