mongodb - 检查日期是否属于 mongodb 中的日期数组
问题描述
我有一个描述像这样的从业者的文件
{
name: String;
schedules: {
weekend: [Number],
timings: [{
from: {hour: Number, minute: Number},
to: {hour: Number, minute: Number}
}]
}
}
我想要一种方法来使用 mongoose/mongodb 检查时间数组中是否包含日期小时和分钟,但我无法弄清楚这一点,因为我无法找到有关此问题的任何文档/问题
编辑1:
我的输入值为 javascript ISO 日期,预期结果为真或假。
解决方案
询问
- 而不是
ISODate("2017-01-01T02:46:12Z")
把你的日期变量放在两个地方 - 第一个 let 创建一个用于比较的日期变量
- 从假开始减少
- 如果还没有找到匹配项
- 检查 from_date(convert_first) <= your_date <= to_date(convert_first)
- 否则,如果已经找到匹配项,则保留真实值
- 如果至少有一个匹配所有 reduce 将评估为 true
- 将该真/假值设置为新字段
- 您可以根据需要对其进行过滤,以保留虚假或真实的文件
aggregate(
[{"$set":
{"date-in-timings":
{"$let":
{"vars":
{"your_date":
{"$dateFromParts":
{"year": 2021,
"hour": {"$hour": ISODate("2017-01-01T02:46:12Z")},
"minute": {"$minute": ISODate("2017-01-01T02:46:12Z")}}}},
"in":
{"$reduce":
{"input": "$schedules.timings",
"initialValue": false,
"in":
{"$cond":
[{"$not": ["$$value"]},
{"$and":
[{"$gte":
["$$your_date",
{"$dateFromParts":
{"year": 2021,
"hour": "$$this.from.hour",
"minute": "$$this.from.minute"}}]},
{"$lte":
["$$your_date",
{"$dateFromParts":
{"year": 2021,
"hour": "$$this.to.hour",
"minute": "$$this.to.minute"}}]}]}, "$$value"]}}}}}}}])
推荐阅读
- java - ZonedDateTime 与时区添加到打印格式
- node.js - expressjs 将控制器对象返回给 res.send
- gstreamer - x264enc 中有质量预设吗?
- java - 对空对象使用“isEmpty()”时如何避免“NullPointerException”
- git - 使用 Git 参考存储库时,我需要对管道代码进行修改吗
- php - mysqli_stmt::bind_param():变量与参数数量不匹配
- java - 如何对通过 Java 中的输入作为字符串接收的 int 数组/列表进行排序
- javascript - 强制下载文件 - 外部 URL
- reactjs -