Javascript 在一个MongoDB调用中同时使用find()和findById()

Javascript 在一个MongoDB调用中同时使用find()和findById(),javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我想从一个房间中选择数据,但我还需要所有其他房间的ID 我是和你一起做的 const roomId = req.params.roomId; Room.findById(roomId).then(room => { if (room) { Room.find({}).sort({ createdAt: 1 }).then(rooms => { if (rooms) { res.render() } }).catch(nex

我想从一个房间中选择数据,但我还需要所有其他房间的ID

我是和你一起做的

const roomId = req.params.roomId;

Room.findById(roomId).then(room => {
  if (room) {
    Room.find({}).sort({ createdAt: 1 }).then(rooms => {
      if (rooms) {
        res.render()
      }
    }).catch(next);
  }
}).catch(next);
但这会导致两个数据库调用

是否可以将其限制为仅1次呼叫

我想要的房间有很多数据,我不需要为其他房间提取这些数据,因为我只需要它们的ID。

通过.find()获取所有房间,然后使用函数从完整的数据集中筛选出您想要的内容。下划线库也适用于大型数据集

理想情况下,代码应如下所示:

Room.find({}).sort({ createdAt: 1 }).then(rooms => {
  if (rooms) {
    var filteredRoom = _.findWhere(rooms, {_id: roomId})
    filteredRoom = filteredRoom.pop()
    res.render()
  }
}).catch(next);
通过.find()获取所有房间,然后使用函数从完整的数据集中筛选出您想要的内容。下划线库也适用于大型数据集

理想情况下,代码应如下所示:

Room.find({}).sort({ createdAt: 1 }).then(rooms => {
  if (rooms) {
    var filteredRoom = _.findWhere(rooms, {_id: roomId})
    filteredRoom = filteredRoom.pop()
    res.render()
  }
}).catch(next);

这与
Array.find()相同吗?如果可能的话,我希望避免包含
underline.js
,因为它有些相同。但如果不想使用下划线.js,请尝试mongodb中的aggregate()。我想这会对你有帮助,但我不确定。您可以使用它实现查询的联合。我想不出任何其他方法。这与
Array.find()
相同吗?如果可能的话,我希望避免包含
underline.js
,因为它有些相同。但如果不想使用下划线.js,请尝试mongodb中的aggregate()。我想这会对你有帮助,但我不确定。您可以使用它实现查询的联合。我想不出别的办法。