2016-11-21 1 views
0

Я хочу выбрать данные из 1 комнаты, но я также хочу идентификаторы всех других комнат.Оба find() и findById() в одном вызове MongoDB

Я делаю это с

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-х обращений к базе данных.

Можно ли ограничить его только одним звонком?

В комнате, в которой я хочу, есть много данных, которые мне не нужно извлекать для других комнат, так как мне нужны только их идентификаторы.

ответ

2

Получить все номера по .find(), а затем использовать функцию underscore library'sfindWhere, чтобы отфильтровать то, что вы хотите, из полного набора данных. Библиотека подчеркивания отлично работает и для больших наборов данных.

В идеале код должен выглядеть следующим образом:

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

Является ли это то же самое, как 'Array.find()'? Я хотел бы избежать включения 'underscore.js', если возможно – Jamgreen

+0

Да, это несколько то же самое. Но если вы не хотите использовать underscore.js, попробуйте aggregate() в mongodb. Я хочу, чтобы это помогло вам, но я не уверен. Вы можете добиться объединения запросов с ним. Я не думаю о другом. –

Смежные вопросы