mongodb - 什么性能更好,双并行查询还是先查询再array.reduce?MongoDB 和 JavaScript 性能
问题描述
我想知道,从长远来看,假设数据库中充满了文档(可能是数千个),哪个选项具有更好的性能。
1.并行执行两个查询:
第一个查询获取用户所在的所有房间属性。第二个查询获取用户所在的不同房间的列表,并且每个房间的共享属性设置为 true。
const roomsInfo = await Promise.all([
db.collection('rooms').find({'users.userId': user.userId}).toArray()
db.collection('rooms').distinct('users.id', {'users.id': "myuserId", share: true}),
])
示例输出:
roomsInfo[0] = [{
"id": "room1",
"name": "room1name",
"data": "XXXX",
"users" [{
"id": "User1",
"data": "XXXX",
},{
"id": "User2",
"data": "XXXX",
}],
share: true
}, {
"id": "room2",
...
"share": true
},{
"id": "room3",
...
"share": false
},{
"id": "room4",
...
"share": false
}]
roomsInfo[1] = ["room1", "room2"]
2.做一个查询然后减少:
const roomInfo = await db.collection('rooms').find({'users.id': "myuserId"}).toArray()
const roomFiltered = roomInfo.reduce((a, o) => (o.share && a.push(o.id), a), [])
第二个选项与第一个选项的结果相同
(2nd option) roomInfo = roomInfo[0] (1st option)
(2nd option) roomFiltered = roomInfo[1] (1st option)
非常感谢您提前。
解决方案
我认为使用第一个解决方案(两个并行查询)例如,您的 DB 中有 1000000 条记录,MongoDB 用于不同查询的速度比您的本地 for 循环快
推荐阅读
- ios - 无法设置我的导航栏标题的字体大小
- android - Android Scroll View 中的时间滚动禁用
- python - 在数据框中切片字符串
- ruby-on-rails - 如何调查没有 CI 描述而失败的黄瓜故障
- .net-core - Semver compatible autoincrement the version number of a prerelease nupkg
- jenkins - Jenkins npm install not creating node_modules folder
- gmail - Monitor history of delegated user
- database - delete from table where rownum() = 3
- javascript - Monaco-Editor JavaScript Syntax Highlighting of Keywords
- json - Filter result when use GET