如何使用从另一个查询获取的参数获取LoopBack的对象

时间:2018-01-05 08:26:52

标签: javascript mongodb loopbackjs

我会尽量清楚,但请问我是否遗漏了一些细节。

所以我有一个我继承的应用程序,它运行缓慢。它是在前端使用Angular和Typescript构建的,Loopback处理我们的CRUD操作和Mongo DB。我们隔离了缓慢的原因之一,因为多余的REST调用(有时可能有数万个),所以我正在考虑减少这个。我找到的第一个是一个相对较小的一个,所以我希望它能帮助我学习,但我已经遇到了挑战。为简单起见,删除了描述,表名和更精细的细节。

在第一页上,我们向用户显示他们有权访问的区域的链接列表。这存储在"区域"表。我们在类似于此的函数中拉回所有区域:

this.ourApi.areas.find({
    "filter": {
        "include": ["generalInfo"]
        /*
           This table is related to most tables and
           holds things like version numbers - it
           is not relevant to this question
        */
    }
}).$promise.then((returnedAreas) => {
    /* Stuff */
});

在我们拥有所有区域之后,我们必须获得这些区域链接的一些配置值(主要是图标)。我们的配置表包含许多项目的配置数据,而不仅仅是区域。因此,为了获得相关的配置信息,我们遍历returnedAreas,并为每个区域获取relatedIdareaId匹配的配置。有点像这样:

return this.ourApi.configs.find({
    "filter": {
        "where": {
            "relatedId": areaId
        },
        "include": ["generalInfo"]
    }
}).$promise.then((areaConfigurations) => {
    /* Stuff */
});

理想情况下,我希望将其压缩为一次调用(然后在整个应用程序中模仿此模式)。我们真正关心的唯一事情(以及我们实际使用的唯一对象)是配置对象,所以我们真的不需要"区域"对象。我无法解决的挑战是如何调整上面的第二个调用(获取配置),以便它首先获取区域,然后在查询中使用areaId来获取我关心的数据。在SQl中,这很容易,但我无法从文档中找到它。

基本上,我正在寻找与Loopback相当的:

SELECT * FROM configs WHERE relatedId IN (SELECT areaId FROM areas)

这可能吗?

0 个答案:

没有答案