【问题标题】:Sails.js query model filtering by collection attributeSails.js 查询模型按集合属性过滤
【发布时间】:2016-04-15 08:59:41
【问题描述】:

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

如果可以使用简单的查询来做到这一点,有什么想法吗?

【问题讨论】:

    标签: javascript node.js sails.js


    【解决方案1】:

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

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

    目前尚无法使用 Sails 通过关联属性进行查询,尽管它已在路线图上。但是一旦你像上面那样设置了你的Book模型,你就可以通过反向查询得到你想要的:

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

    【讨论】:

    • 如果一本书不知道它属于谁。我的意思是 Book 模型没有“人”属性。
    • “Sails 目前无法通过关联属性进行查询”= 哎哟。这是任何类型的搜索页面中的一阶操作,并在关系数据库领域中查询 101。我想是时候检查 .native() 了,或者必须在 js 中进行所有过滤(我相信这会扩展,哈哈)。
    • 好的,所以它只是对更多事物进行更多查询,然后处理代码中的“连接”。现在我考虑一下,这可能更好,因为它迫使您不使用“连接”,无论如何您最终不得不在大规模搜索页面中删除它。来自关系数据库的不支持这仍然很有趣,但我明白了。
    猜你喜欢
    • 2021-09-27
    • 2015-08-05
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    相关资源
    最近更新 更多