在一个MongoDB调用中都有find()和findById()

时间:2016-11-21 05:40:32

标签: javascript node.js mongodb mongoose

我想从1个房间中选择数据,但我也想要所有其他房间的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);

但这导致2次数据库调用。

是否可以将其限制为仅1次通话?

我想要的房间有很多数据,我不需要为其他房间提取数据,因为我只需要他们的身份证。

1 个答案:

答案 0 :(得分:2)

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

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

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