这里我使用sailsjs 0.11和mongoDB来存储数据。
我有2个型号
1. Room.js
module.exports: {
attributes: {
messages: {
collection: 'Message',
via: 'room'
}
}
}
2。 Message.js
module.exports: {
attributes: {
room: {
model: 'Room'
}
}
}
在这里,我们如何才能找到至少有1条消息的房间。因为在populate函数中写入的条件将过滤消息,但会显示所有房间。有没有办法做到这一点?
我试过
Room.find()
.populate('messages', {limit: 1})
.exec(function(err, rooms){
if(err) return console.log(err);
if(rooms) {
return console.log(rooms); // it displays all the rooms but should display only if messages exists.
}
return res.send(404);
})
修改
嗨我这样做了。
Room.find()
.populate('messages', {limit: 1})
.exec(function(err, r){
if(err) return console.log(err);
if(!r) return res.send(404);
// removing all the rooms that does not contains message.
_.remove(r, function(room){
return room.messages.length==0;
});
Room.find({id: _.pluck(r, 'id')})
.populate('messages', {limit: 1})
.offset(page_number * 20)
.limit(20)
.exec(function(err, rooms){
if(err) return console.log(err);
if(rooms) {
return console.log(rooms);
}
return res.send(404);
})
});
还有其他方法可以优化吗?