1

我正在尝试使用 Sails 查询语言来查询两个表,以 Postgresql 作为数据库。

我有两张桌子“人”和“宠物”。

对于“人”,其模型为:

id: { type: 'integer', primaryKey }
namePerson: { type: 'string' }
age: { type: 'integer' }

对于“宠物”,它的模型是:

id: { type: 'integer', primaryKey }
owner: { model: 'Person' }
namePet: { type: 'string' }

我想查找 12 岁以下的人拥有的所有宠物,并且我想在一个查询中完成。那可能吗?

我只知道如何在两个查询中做到这一点。首先,找出所有 12 岁以下的人:

Person.find({age: {'<', 12}}).exec(function (err, persons) {..};

然后,找到他们拥有的所有宠物:

Pet.find({owner: persons}).exec( ... )
4

1 回答 1

2

你这里需要一对多的关联(一个人可以有几只宠物)。

您的人应该与宠物相关联:

module.exports = {

    attributes: {
        // ...
        pets:{
            collection: 'pet',
            via: 'owner'
        }
    }
}

您的宠物应与以下人员相关联:

module.exports = {

    attributes: {
        // ...
        owner:{
            model:'person'
        }
    }
}

您仍然可以按年龄标准查找用户:

Person
    .find({age: {'<', 12}})
    .exec(function (err, persons) { /* ... */ });

要获取用户和他的宠物,您应该填充关联:

Person
    .find({age: {'<', 12}})
    .populate('pets')
    .exec(function(err, persons) { 
        /* 
        persons is array of users with given age. 
        Each of them contains array of his pets
        */ 
    });

Sails 允许您在一个查询中执行多个填充,例如:

Person
    .find({age: {'<', 12}})
    .populate('pets')
    .populate('children')
    // ...

但是嵌套种群不存在,这里的问题讨论

于 2015-09-28T08:23:33.720 回答