首页 > 解决方案 > 什么性能更好,双并行查询还是先查询再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)

非常感谢您提前。

标签: mongodb

解决方案


我认为使用第一个解决方案(两个并行查询)例如,您的 DB 中有 1000000 条记录,MongoDB 用于不同查询的速度比您的本地 for 循环快


推荐阅读