Sails.js 对关联值的查询

Posted

技术标签:

【中文标题】Sails.js 对关联值的查询【英文标题】:Sails.js query on an associated value 【发布时间】:2014-05-21 08:40:00 【问题描述】:

我正在使用 Sails.js 版本 0.10.0-rc4。所有模型都使用sails-mysql

我正在尝试查询与另一个模型具有“一对多”关联的模型(查询发生在“多”端)。

看起来像这样:

Post.find()
    .where( category: category_id )
    .populate("category")
    .exec( ... )

这给了我一个空数组,但是当我省略 .populate("category") 时,我得到了正确的结果集。

我知道我可以离开 .populate("category"),然后分别获取每个相关的 Category 对象,但我想知道是否有更好的解决方案来解决这个问题。

【问题讨论】:

【参考方案1】:

目前还不是 100% 清楚您要在这里做什么。如果您的目标是过滤 Post 上填充的类别,您可以这样做:

Post.find()
    .populate("category", where:  category: category_id )
    .exec( ... )

如果您只想检索特定类别的Posts,您可以:

Category.findOne(category_id)
        .populate("posts")
        .exec(function(e, c) console.log(c.posts);)

【讨论】:

第二个 sn-p 完成这项工作。我想获得特定类别的帖子。问题是我在这条路线上运行了一堆不同的查询(按名称获取帖子,按观看次数获取帖子等)。因此,我希望能够以类似的方式查询“按类别获取帖子”。你知道这是否可行吗? 遇到相同的情况..顺便说一句,@scott 这仅适用于一对一关联? 这里也有同样的问题。这仅适用于一对一关联,不适用于一对多或多对五。 @Lujaw,你找到解决方案了吗? 第一个 sn-p 在多对多关联中对我不起作用。【参考方案2】:

原帖太早了

以下对我有用(帆 0.12)的人口:

Post.find(category: category_id)
    .populate("category")
    .exec( ... )

但我仍然很困惑在子查询中搜索除 id 之外的任何其他属性的人..

Edit2:似乎还不支持深度查询:https://github.com/balderdashy/waterline/issues/266

【讨论】:

以上是关于Sails.js 对关联值的查询的主要内容,如果未能解决你的问题,请参考以下文章

Sails.js 填充嵌套关联

从 Sails.js 中的关联模型访问模型的属性

Sails.js + Waterline:通过关联进行多对多

如何在 Sails.js 中定义需要来自第三个模型/表的附加条件和/或数据的模型关联?

Sails.js - 如何对具有数组类型属性的模型进行本机查询?

Sequelize ORM中HasOne和BelongsTo的区别