mysql-Mongodb:基于时间的ISODate格式查询
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql-Mongodb:基于时间的ISODate格式查询,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1679字,纯文字阅读大概需要3分钟。
内容图文
![mysql-Mongodb:基于时间的ISODate格式查询](/upload/InfoBanner/zyjiaocheng/887/87b8192cef354706ac3d54cb2d6795d4.jpg)
假设Mongodb数据库中的示例文档如下:
{ "date" : ISODate("2015-11-09T05:58:19.474Z") }
{ "date" : ISODate("2014-10-25T07:30:00.241Z") }
{ "date" : ISODate("2015-11-30T15:24:00.251Z") }
{ "date" : ISODate("2012-01-10T18:36:00.101Z") }
预期:
{ "date" : ISODate("2015-11-09T05:58:19.474Z") }
{ "date" : ISODate("2014-10-25T07:30:00.241Z") }
Iam希望找到“日期”字段中的时间在04:00到08:00之间(与年,月和年无关)的文档.间接查询必须与日期字段中的任何“ YYYY-MM-DDT”匹配.
我的方法是,从节点的日期的估计持续时间内查询所有文档,然后对与查询匹配的每个文档,将文档的“日期”字段与“ yyyy-MM-DDT”“ required_time”(“ YYYY-MM” -DD是从每个文档的“日期字段”复制来进行比较的,方法是使用moment.js模块将其转换为moment()并获取month,date和year“).
有什么查询方法可以直接获得相同的结果?
注意:我正在使用nodejs连接到mongodb
解决方法:
一种方法是使用aggregation framework,尤其是$redact运算符,该运算符根据文档及其子文档中的值来剥离内容的文档流.根据布尔表达式的结果,可以从流中修剪文档,也可以在检查其子文档之后将其包含在流中,或者将其完全传递到流中. $redact背后的想法是使从流中轻松删除敏感信息变得容易.
在您的情况下,条件表达式使用$cond运算符和$and布尔运算符使用比较运算符$gt和$lt来表示时间范围之间的逻辑AND.使用$hour date运算符可将日期字段的小时返回为介于0和23.因此,最终的汇总如下所示:
db.collection.aggregate([
{
"$redact": {
"$cond": {
"if": {
"$and": [
{ "$gt": [ {"$hour": "$date"}, 4] },
{ "$lt": [ {"$hour": "$date"}, 8] }
]
},
"then": "$$KEEP",
"else": "$$PRUNE"
}
}
}
])
样本输出:
/* 0 */
{
"result" : [
{
"_id" : ObjectId("56404450472fe25cc6b85886"),
"date" : ISODate("2015-11-09T05:58:19.474Z")
},
{
"_id" : ObjectId("56404450472fe25cc6b85887"),
"date" : ISODate("2014-10-25T07:30:00.241Z")
}
],
"ok" : 1
}
内容总结
以上是互联网集市为您收集整理的mysql-Mongodb:基于时间的ISODate格式查询全部内容,希望文章能够帮你解决mysql-Mongodb:基于时间的ISODate格式查询所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。