Javascript 按集合属性筛选的Sails.js查询模型

Javascript 按集合属性筛选的Sails.js查询模型,javascript,node.js,sails.js,Javascript,Node.js,Sails.js,假设我在Sails.js v0.10中有以下模型: Person.js module.exports = { attributes: { name: 'string', books: { collection: 'book', via: 'person' } } }; Book.js module.exports = { attributes: { name: 'string', person: {

假设我在Sails.js v0.10中有以下模型:

Person.js

module.exports = {

  attributes: {

    name: 'string',

    books: {
      collection: 'book',
      via: 'person'
    }

  } 
};

Book.js

module.exports = {

  attributes: {

    name: 'string',

    person: {
      model: 'person'
    }

  } 
};
我需要一个查询来返回一组具有特定关联书籍的人员。我想执行以下查询,但不知道如何执行:

  Person.find()
    .populate('books')
    .where({ books.name: 'Game of Thrones'})
    .exec(function(err, person) {
      if (err) return res.send(err, 500);
      res.json(person);
    });

如果可以用一个简单的查询来实现这一点,你有什么想法吗?

首先,你需要调整你的
书籍
模型,使其成为多对多关联:

module.exports = {

  attributes: {

    name: 'string',

    people: {
      collection: 'person',
      via: 'books'
    }

  } 
};

通过关联的属性进行查询目前在Sails中是不可能的,尽管它已经在路线图上了。但是,一旦您按照上述方式设置了
书籍
模型,您就可以通过反向查询获得所需:

Book.findOne({name: 'Game of Thrones'}).populate('people').exec(...);

如果一本书不知道它属于谁呢。我的意思是图书模型没有“people”属性。“使用Sails”=哎哟,按关联属性查询当前是不可能的。这是任何类型的搜索页面中的一阶操作,在关系数据库中查询101。我想是时候签出.native()了,或者必须在js中完成所有的过滤(我相信这会扩展的,lol)。好的,所以只需要对更多的东西进行更多的查询,然后在代码中处理“连接”。现在我想,这可能更好,因为它迫使你不使用“连接”,而你最终不得不在大规模搜索页面中删除它。从关系数据库得知这不受支持仍然很有趣,但我明白了。