仅当关联模型存在时,sailsjs才会填充

时间:2016-01-23 07:01:52

标签: javascript mongodb sails.js waterline

这里我使用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);
        })
    });

还有其他方法可以优化吗?

0 个答案:

没有答案