javascript - 如何用javascript确定json数组中的相交对象?
问题描述
我有这样的json数据:
[{
"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
}
}
]
我想得到这样的结果,确定哪个与Time相交:
[
["Test 1", "Test 2", "Test 4"],
["Test 3"]
]
我有解决方案,但它太复杂了,我在彼此内部使用了 4 个循环
如果有更简单的解决方法,请指教,谢谢!
解决方案
Try aggregation, I am not sure this will work exact as per your requirement,
$addFields
add new fieldstartHour
, that splits string hour and minute from string, using$split
, and$arrayElemAt
return first element means hour$group
bystartHour
and make array ofName
db.collection.aggregate([
{
$addFields: {
startHour: {
$arrayElemAt: [{ $split: ["$Time.start", ":"] }, 0]
}
}
},
{
$group: {
_id: "$startHour",
Name: { $push: "$Name" }
}
}
])
Result:
[
{
"Name": ["Test 1","Test 2","Test 4"],
"_id": "22"
},
{
"Name": ["Test 3"],
"_id": "23"
}
]
推荐阅读
- javascript - 无法通过 URL 将变量从 javascript 文件传递到 php 文件
- openid - OpenID 客户端提供者
- javascript - 当其中有冒号和下划线时,似乎无法按 ID 选择元素
- javascript - Javascript - 从过滤器中删除数组中的对象
- multithreading - 控制每个 MPI 进程的核心数量(独立于每个等级)
- reactjs - 如何在底部标签导航器中显示徽章?
- javascript - JWK“key_ops”成员与 Web Crypto 调用指定的成员不一致
- f# - 如何使用 F# 实现这个通用 C# 接口?
- javascript - innerHTML Web 组件中的 @import CSS 文件不起作用
- java - 请求超时 - JMeter HTTP2 插件