首先,对不起,如果我的问题很明显,但我在使用mongodb进行特定查询时遇到了一些麻烦。
假设我有一个包含以下文件的集合:
+----+--------+---------------------+
| ID | user | record_date |
+----+--------+---------------------+
| 1 | Frank | 2017-05-10 12:13:15 |
| 2 | Ian | 2017-05-10 13:15:18 |
| 3 | Ian | 2017-05-10 17:45:34 |
| 4 | Lip | 2017-05-10 18:53:12 |
| 5 | Frank | 2017-05-10 18:54:23 |
| 6 | Fiona | 2017-05-10 20:12:48 |
| 7 | Debbie | 2017-05-11 05:05:12 |
| 8 | Ian | 2017-05-11 08:17:38 |
| 9 | Debbie | 2017-05-11 08:30:57 |
| 10 | Carl | 2017-05-11 14:17:18 |
+----+--------+---------------------+
我试图获取在时间间隔而不是日期间隔之间具有record_date的任何文档:例如,record_date时间在17:00到19:00之间的所有文档。
使用postgres或mysql,这有点简单:我将日期值转换为数字(ex为第一个文档:1213)和一个简单的查询,如record_date BETWEEN(1700,1900),但我有使用mongo获得相同结果的麻烦。
有人有想法做这样的请求吗?
非常感谢!
吉姆
答案 0 :(得分:0)
db.times.aggregate([{"$project": {time : {"$dateToString": {format : "%H",
date : "$record_date"}}}}, {"$match" : {time: {"$gte":"17","$lte":"19"}}}])
此聚合管道在项目阶段使用$ dateToString聚合运算符取出时间部分(特别是使用格式“%H”的小时部分),然后使用匹配阶段过滤结果。 参考 - $dateToString
如果您需要了解有关聚合管道如何工作的更多信息 - Aggregation Pipeline
答案 1 :(得分:0)
试试这个:
db.record.aggregate([
{
$match:{
$and: [
{
record_date: {
$gte: "2017-05-10 17:00:00",
},
},
{
record_date: {
$lte: "2017-05-10 19:59:59",
},
},
]
}
}
])