我有一个如下所述的收藏集。
当我应用以下过滤器时:
db.getCollection("Marcaciones")
.find(
{
uuid: "12345",
fecha_registro: { $gte: ISODate("2019-06-20 00:00:00.000Z") },
fecha_registro: { $lte: ISODate("2019-06-25 23:59:59.999Z") }
},
{ fecha_registro: 1, _id: 0 }
)
.sort({ fecha_registro: -1 });
但是我不知道如何对日期和/或类似于MongoDB中不同的日期进行分组
我想得到这个结果:
{"fecha_registro": "2019-06-20"},
{"fecha_registro": "2019-06-21"},
{"fecha_registro": "2019-06-22"},
{"fecha_registro": "2019-06-24"},
{"fecha_registro": "2019-06-25"}
使用下面的数据集;
db.Marcaciones.insert({ "uuid": "12345", "tipo": "1", "fecha_registro": ISODate("2019-06-19 09:11:45.285Z") })
db.Marcaciones.insert({ "uuid": "12345", "tipo": "2", "fecha_registro": ISODate("2019-06-19 12:22:22.665Z") })
db.Marcaciones.insert({ "uuid": "12345", "tipo": "3", "fecha_registro": ISODate("2019-06-19 12:54:55.788Z") })
db.Marcaciones.insert({ "uuid": "12345", "tipo": "4", "fecha_registro": ISODate("2019-06-19 18:07:10.138Z") })
db.Marcaciones.insert({ "uuid": "12345", "tipo": "1", "fecha_registro": ISODate("2019-06-20 08:47:12.982Z") })
db.Marcaciones.insert({ "uuid": "12345", "tipo": "2", "fecha_registro": ISODate("2019-06-20 12:23:24.866Z") })
db.Marcaciones.insert({ "uuid": "12345", "tipo": "3", "fecha_registro": ISODate("2019-06-20 13:00:28.387Z") })
db.Marcaciones.insert({ "uuid": "12345", "tipo": "4", "fecha_registro": ISODate("2019-06-20 17:59:57.922Z") })
db.Marcaciones.insert({ "uuid": "12345", "tipo": "1", "fecha_registro": ISODate("2019-06-21 08:51:17.527Z") })
db.Marcaciones.insert({ "uuid": "12345", "tipo": "2", "fecha_registro": ISODate("2019-06-21 12:20:23.028Z") })
db.Marcaciones.insert({ "uuid": "12345", "tipo": "3", "fecha_registro": ISODate("2019-06-21 12:46:06.670Z") })
db.Marcaciones.insert({ "uuid": "12345", "tipo": "1", "fecha_registro": ISODate("2019-06-22 09:06:18.442Z") })
db.Marcaciones.insert({ "uuid": "12345", "tipo": "2", "fecha_registro": ISODate("2019-06-22 13:24:17.891Z") })
db.Marcaciones.insert({ "uuid": "12345", "tipo": "3", "fecha_registro": ISODate("2019-06-22 13:31:00.606Z") })
db.Marcaciones.insert({ "uuid": "12345", "tipo": "4", "fecha_registro": ISODate("2019-06-22 13:31:05.537Z") })
db.Marcaciones.insert({ "uuid": "12345", "tipo": "1", "fecha_registro": ISODate("2019-06-24 08:51:21.862Z") })
db.Marcaciones.insert({ "uuid": "12345", "tipo": "2", "fecha_registro": ISODate("2019-06-24 12:28:49.500Z") })
db.Marcaciones.insert({ "uuid": "12345", "tipo": "3", "fecha_registro": ISODate("2019-06-24 13:08:36.422Z") })
db.Marcaciones.insert({ "uuid": "12345", "tipo": "4", "fecha_registro": ISODate("2019-06-24 18:00:41.499Z") })
db.Marcaciones.insert({ "uuid": "12345", "tipo": "1", "fecha_registro": ISODate("2019-06-25 08:49:03.776Z") })
db.Marcaciones.insert({ "uuid": "12345", "tipo": "2", "fecha_registro": ISODate("2019-06-25 13:27:05.152Z") })
db.Marcaciones.insert({ "uuid": "12345", "tipo": "3", "fecha_registro": ISODate("2019-06-25 13:44:02.609Z") })
db.Marcaciones.insert({ "uuid": "12345", "tipo": "1", "fecha_registro": ISODate("2019-06-26 08:49:06.356Z") })
db.Marcaciones.insert({ "uuid": "12345", "tipo": "2", "fecha_registro": ISODate("2019-06-26 12:30:52.041Z") })
db.Marcaciones.insert({ "uuid": "12345", "tipo": "3", "fecha_registro": ISODate("2019-06-26 13:18:37.833Z") })
db.Marcaciones.insert({ "uuid": "12345", "tipo": "4", "fecha_registro": ISODate("2019-06-26 18:02:35.837Z") })
db.Marcaciones.insert({ "uuid": "12345", "tipo": "1", "fecha_registro": ISODate("2019-06-27 08:43:45.077Z") })
db.Marcaciones.insert({ "uuid": "12345", "tipo": "2", "fecha_registro": ISODate("2019-06-27 12:33:16.952Z") })
答案 0 :(得分:1)
您需要利用aggregate
数组;
使用4.0.6版的MongoDB
db.Marcaciones.aggregate(
[
{ $match : { $and :
[
{ uuid : "12345" },
{ fecha_registro: {"$gte": ISODate("2019-06-20 00:00:00.000Z")}},
{ fecha_registro: {"$lte": ISODate("2019-06-25 23:59:59.999Z")}}
]
}
},
{ $project: { fecha_registro: { $dateToString: { format: "%Y-%m-%d", date: "$fecha_registro" } }, _id: 0 } },
{ $group: { _id: '$fecha_registro' } },
{ $sort : { _id : 1 } }
]
);
我可以通过上述查询得到以下信息;
{"_id": "2019-06-20"},
{"_id": "2019-06-21"},
{"_id": "2019-06-22"},
{"_id": "2019-06-24"},
{"_id": "2019-06-25"}
重要的部分是$dateToString
和$group
如果您想将
fecha_registro
作为最终结果的名称,而不是_id
,则可以 加;{ $project: { fecha_registro: "$_id", _id: 0 } }
在聚合结束时。
ps。您的预期数据有误"2019-06-23"
不应包含在结果中。由于您的收集数据中没有这样的日期...