Sails.js填充在哪里

时间:2015-05-13 22:01:46

标签: sails.js waterline populate

我需要选择带狗的用户( <div class="row"> <div> <div class="col-lg-4" ></div> </div> <div> <div class="col-lg-4" ></div> </div> <div> <div class="col-lg-4" ></div> </div> </div> 等于'狗'的宠物)

type

我没有找到任何例子,我试过这样的

var User = Waterline.Collection.extend({

  identity: 'user',

  attributes: {
    firstName: 'string',
    lastName: 'string',

    pets: {
      collection: 'pet',
      via: 'owner'
    }
  }
});

var Pet = Waterline.Collection.extend({

  identity: 'pet',

  attributes: {
    type: 'string',
    name: 'string',

    owner: {
      model: 'user'
    }
  }
});

和这个

User.find().populate('pets', {type: 'dog'}).exec(err, users) ...

但这不起作用

如果结果用户数组没有宠物记录,那么会很重要

3 个答案:

答案 0 :(得分:4)

你试过这个吗?

User.find().populate('pets', {
  where: {
    type: 'dog'
  }
}).exec(err, users)...

答案 1 :(得分:1)

您所寻找的内容尚未在水线(Sails ORM)中实施,请查看issue #266了解详情。

  

User.find()

这将返回所有用户(populate('pets', {type: 'dog'}))并仅填充dog(.query())类型的宠物。因此,您的结果中会有没有狗的用户。

  

User.find()。where({&#39; pets.type&#39;:&#39; dog&#39;})。populate(&#39; pets&#39;)。exec(错误,用户)......

Waterline不支持点(。)表示法。由于MongoDB support,Sails-mongo确实得到了一些支持。

最后,如果您正在使用其中一个SQL适配器,则可以使用a = 100.0 b = 50.0 c = 200.0 docs)执行原始SQL查询来解决此问题。

答案 2 :(得分:1)

如果您不需要查询用户,只需要查询狗。您可以轻松地反转查询。

Pet.find({type: 'dog'}).populate('users').exec(err, petsWithUsers)