2016-11-21 1 views
0

1つの部屋からデータを選択したいのですが、他のすべての部屋のIDも必要です。1つのMongoDBコールでfind()とfindById()の両方を実行します

私は

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回だけに制限できますか?

私が望む部屋には、IDだけが必要なので、他の部屋のために抽出する必要のないデータがたくさんあります。

答えて

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を使用したくない場合は、mongodbでaggregate()を試してください。私はそれがあなたを助けるつもりですが、私は確信していません。あなたはそれを使ってクエリの和集合を得ることができます。私は他の方法を考えていません。 –

関連する問題