Tengo datos json como este:
[{ "Id": 1, "Name": "Test 1", "Time": { "start": "22:00", "end": "22:30", "duration": 30 } }, { "Id": 2, "Name": "Test 2", "Time": { "start": "22:05", "end": "22:35", "duration": 30 } }, { "Id": 3, "Name": "Test 3", "Time": { "start": "23:25", "end": "23:40", "duration": 15 } },{ "Id": 4, "Name": "Test 4", "Time": { "start": "22:15", "end": "22:50", "duration": 15 } } ]Y quiero obtener un resultado como este, determinar qué se cruzan por Time :
[ ["Test 1", "Test 2", "Test 4"], ["Test 3"] ]Tengo una solución, pero es demasiado complicada y uso 4 bucles uno dentro del otro.
Si hay una solución más fácil, sugiérala, ¡gracias!
Pruebe la agregación, no estoy seguro de que esto funcione exactamente según sus requisitos,
$addFields agrega un nuevo campo startHour , que divide la cadena hora y minuto de la cadena, usando $split , y $arrayElemAt devuelve el primer elemento que significa hora$group por startHour y hacer una matriz de Name db.collection.aggregate([ { $addFields: { startHour: { $arrayElemAt: [{ $split: ["$Time.start", ":"] }, 0] } } }, { $group: { _id: "$startHour", Name: { $push: "$Name" } } } ])Resultado:
[ { "Name": ["Test 1","Test 2","Test 4"], "_id": "22" }, { "Name": ["Test 3"], "_id": "23" } ]