js查询模型通过集合属性过滤

Sails.js query model filtering by collection attribute

本文关键字:集合 属性 过滤 查询 模型 js      更新时间:2023-09-26

假设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);
    });

任何想法,如果这是可能的,使用一个简单的查询?

首先,您需要调整您的Book模型,使其成为多对多关联:

module.exports = {
  attributes: {
    name: 'string',
    people: {
      collection: 'person',
      via: 'books'
    }
  } 
};

根据关联的属性进行查询目前在Sails中是不可能的,尽管它在路线图上。但是,一旦如上所述设置了Book模型,就可以通过反向查询获得所需的结果:

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