angularjs - LoopbackJS:HasAndBelongsToMany,如何按关系的属性查询/过滤?

标签 angularjs node.js loopbackjs strongloop

我目前正在开发我的第一个 Loopbackjs 项目,并面临一个看似简单的问题: 假设我有一个模型“Post”和一个模型“Tag”。一个帖子拥有并属于多个标签。

现在我需要列出带有特定标签的所有帖子。我只是不知道如何使用 Loopback 创建查询来实现这一点。 我以为它会像这样工作,但事实并非如此: Posts.find( {where: {tag.id: {inq: [1, 4]}}} );

如果有任何帮助,我将不胜感激。

最佳答案

对某些相关属性进行过滤并不像应有的那么容易。 There is a pull request outstanding but it's been open for a long time now.据我所知,过滤的唯一方法是在主模型上,所以你可以这样做:

Tags.find({"include":"posts","where":{"id":{"inq":[1, 4]}}})

不幸的是,您需要做额外的工作才能从返回的结果中获得一个不错的帖子列表。

编辑您也可以使用scope获取所有帖子并仅带回与您的查询匹配的标签,具体如下:

Posts.find({
    "include": { "relation": "tags", 
                    "scope": { 
                        "where": {
                            "id": { "inq": [1, 4]}
                        }
                    }
                }
});

在查询的回调中,可以使用以下代码对结果进行整理后再返回:

var finalresult = instance.filter(function(post) {
    return post.toJSON().tags.length > 0;
});

好处是返回的结果的格式符合您的预期。但是,我的第二个示例的性能可能非常差,因为它总是返回所有帖子,除非您在帖子级别指定过滤器或分页。它基本上是一个左连接,当你想要一个内连接时,环回目前无法做到这一点。

关于angularjs - LoopbackJS:HasAndBelongsToMany,如何按关系的属性查询/过滤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32903293/

相关文章:

angularjs - 如何从单独的指令可靠地访问动态分配的属性值?

javascript - 为什么 ng-repeat 在此 AngularJs 1.5.x 组件中不起作用

javascript - 异步 map 不起作用

node.js - Loopback.io 的 ACL 问题

javascript - 如何在 array.map() 中返回动态对象键

javascript - 我的 Virgin Parse.Query

javascript - 在 NodeJS 中使用文本文件时如何有效地锁定它?

javascript - 如果 secret 作为文字与变量传递,nodejs crypto hmac 会产生不同的哈希值

mongodb - StrongLoop:它是否支持限制 MongoDB 数据库查询返回的字段?

node.js - 如何根据 Loopback 中的标签数组过滤订阅者