sailsjs / waterline查询"其中"不是空的

时间:2014-12-29 00:43:11

标签: sails.js waterline

那里,

在进入hacky / cutom方式之前,我想知道是否有内置query方式来检查空/非空多对多关系,因为我在Google和doc上都没有成功

如果我在文档中采用这个例子,我想想只有当他有一个Pet或Retrive a Pet而没有任何所有者通过查询时才能审阅用户。

// A user may have many pets
var User = Waterline.Collection.extend({

  identity: 'user',
  connection: 'local-postgresql',

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

    // Add a reference to Pet
    pets: {
      collection: 'pet',
      via: 'owners',
      dominant: true
    }
  }
});

// A pet may have many owners
var Pet = Waterline.Collection.extend({

  identity: 'pet',
  connection: 'local-postgresql',

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

    // Add a reference to User
    owners: {
      collection: 'user',
      via: 'pets'
    }
  }
});

P.S。我知道如何在查询执行后过滤结果,而不是我要问的问题:)

2 个答案:

答案 0 :(得分:3)

没有内置的东西(又名User.hasPet())或类似东西。所以简单的答案是否

如果我事先知道这些问题,我倾向于以这样的方式编写我的数据库,以便查询很快。 IE:用户架构将具有hasPets列。每当添加/移除宠物时,如果具有所有者,则回调会命中用户表以标记该字段。那么我可以查询User.findAll({hasPet:true})。

它有点多,但这取决于你需要的速度。

答案 1 :(得分:2)

这有点晚了,但我想告诉您,使用Waterline ORM生命周期功能很容易做到这一点。我已经完成了一些项目。基本上,使用beforeCreate和beforeUpdate函数来设置标志。对于您的用户,它可能看起来像......

span

然后您可以根据has_pet属性进行查询