我在 MongoDB 数据库中有我的数据,下面是格式。我已经搜索了类似于Java中的流功能,但没有找到。
数据来自DB:
[
{
"eventList": [
{
"eventId": "1,2,3",
"eventType": "1"
},
{
"eventId": "4,5,6",
"eventType": "2"
}
]
},
{
"eventList": [
{
"eventId": "7,8,9",
"eventType": "3"
}
]
}
]
服务输入:
{
"eventId": [
"1",
"2"
]
}
我们必须循环输入并匹配db列表中的eventId。JSON payload有60,000行。当我使用传统的for循环时,当我在输入中给予20个事件时,需要23秒。我可能犯了一些错误。也许有最好的办法来处理这件事。我有三个for循环,一个用于输入迭代,一个用于迭代事件列表,它是一个数组,最后一个循环用于比较,以检查eventId是否匹配。
希望我的陈述能涵盖
我的代码我试过了。
for (let i = 0; i < request.eventId.length; i++) {
let eventId = request.eventId[i];
for (let j = 0; j < response.length; j++) {
for (let k = 0; k < response[j].eventList.length) {
if (response[j].eventList[k].eventId.includes(eventId)) {
console.log("matches");
}
}
}
}
1条答案
按热度按时间dy1byipe1#
不确定这些“事件列表”中是否还有其他数据没有在这里显示,但对于手头的任务(从事件id查找事件类型),您可能希望选择更有效的查找结构。您绝对应该将
eventIds
存储在数组中,而不是字符串中(当事件ID包含在另一个ID中时,这也会导致错误匹配)。然后,您应该考虑使用适当的MongoDB查询来获取您正在寻找的事件类型,将输入id直接传递给数据库。无论哪种方式,你也可以在JS中这样做,构建一个查找结构:
然后,在构建后,使用
如果您说
eventTypeByEventId
结构很少更改,您甚至可以在请求之间共享它。