【问题标题】:Sails.js populate with whereSails.js 填充在哪里
【发布时间】:2015-07-25 09:32:07
【问题描述】:

我需要选择有狗的用户(带有type的宠物等于'dog')

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) ...

还有这个

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

但这不起作用

如果结果用户数组没有宠物记录会更好

【问题讨论】:

  • 你是要过滤用户,还是你唯一的过滤器pet.type = dog
  • 任何通过使用 Waterline(非原始查询)解决此问题的建议都很好,也只有 pet.type = dog

标签: sails.js waterline populate


【解决方案1】:

你试过了吗?

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      您正在寻找的内容尚未在水线 (Sails ORM) 中实现,请查看issue #266 了解更多详细信息。

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

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

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

      Waterline 不支持点 (.) 表示法。由于MongoDB support,Sails-mongo 确实对它有一些支持。

      最后,如果您使用其中一个 SQL 适配器,您可以通过使用 .query() (docs) 执行原始 sql 查询来解决此问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-10
        • 2014-09-27
        • 2014-06-20
        • 1970-01-01
        • 2023-04-03
        相关资源
        最近更新 更多