【发布时间】:2019-12-20 21:39:49
【问题描述】:
我想在 Node.js 中执行 $lookup,类似于来自 MongoDB 的 $lookup 聚合。
我有一个解决方案,但我不确定在两个数组中的每个数组中使用更多对象或使用更大对象时它的执行速度有多快。
let users = [
{userId: 1, name: 'Mike'},
{userId: 2, name: 'John'}
]
let comments = [
{userId: 1, text: 'Hello'},
{userId: 1, text: 'Hi'},
{userId: 2, text: 'Hello'}
]
let commentsUsers = [
{userId: 1, text: 'Hello', user: {userId: 1, name: 'Mike'}},
{userId: 1, text: 'Hi', user: {userId: 1, name: 'Mike'}},
{userId: 2, text: 'Hello', user: {userId: 2, name: 'John'}}
] //Desired result
我知道这可以通过 ECMA6 阵列轻松完成。例如:
let commentsUsers = comments.map(comment => {comment, users.find(user => user.userId === comment.userId)} )
对于大量用户来说,这是一种有效的方法,例如。 100万用户。 lodash 与这个或任何其他更专业的库相比如何?有没有更好的方法来使用香草 JS 来做到这一点,例如。使用 Array.prototype.reduce()?可以以任何方式使用索引来提高连接的性能吗?
编辑:
我的理想解决方案
let users = [{userId:1,name:'Mike'},{userId:2,name:'John'}]
let comments = [{userId:1,text:'Hello'},{userId:1,text:'Hi'},{userId:2,text:'Hello'}];
let usersMap = new Map(users.map(user => [user.userId, user]))
let commentsUsers = comments.map(comment => ({...comment, user: usersMap.get(comment.userId)}))
console.log(commentsUsers)
感谢您的反馈!
【问题讨论】:
-
期望的结果不是一个有效的对象。您需要为嵌套对象分配一个键,类似于
user。
标签: javascript arrays node.js mongodb ecmascript-6