繁体   English   中英

在Sails.JS / Waterline中聚合嵌套模型数据

[英]Aggregate nested model data in Sails.JS/Waterline

我正在努力将我的业务逻辑放在我的SailsJS项目中。

我的数据模型如下:

Portfolio (hasMany) -> Positions (hasOne) -> Asset-> (hasMany) Ticks 

我正在寻找使用父模型上的计算属性来汇总子项的数据,一直到项目组合。 eG an Asset知道最新的价格(价格),该位置知道其当前价格(numberShares *其资产的最新Tick)等。理想情况下,我想将此数据添加到JSON,以便我可以将业务逻辑从Ember客户端移开。

这适用于一个级别,但如果我尝试使用子级的计算属性,它是非定义的或使用toJSON()为空时

Asset.js:

latestTick: function () {
    if (this.ticks.length> 0) 
    {

      this.ticks.sort(function(a, b){
       var dateA=new Date(a.date), dateB=new Date(b.date)
       return dateB-dateA
      })


      return this.ticks[Object.keys(this.ticks)[0]].price;
    }

    return 0;
  },


  toJSON: function() {
    var obj = this.toObject();


  if (typeof this.latestTick === 'function')
    obj.latestTick = this.latestTick();
  return obj;
}

这是有效的(在添加类型检查后,根据它是否被嵌套返回它不起作用)。

现在在Position.js

 assetID:{
      model: "Asset",
    },

我想计算currentValue:

   currentValue: function () {
         return this.assetID.latestTick() * this.numberShares;

    },

这不起作用,因为该功能不可用(只有硬编码属性)。 我尝试使用Tick.Find()...但遇到异步问题(在获取数据之前返回JSON)。

我试图强制嵌入/填充JSON中的关联,但它没有任何区别。 一旦我跨越多个层次结构级别,我就不会获得任何数据。

我应该在哪里进行这种聚合? 我不想使用自定义控制器操作,而是利用REST API。

水线不支持深层人口。 如果你想实现这样的深度查询,你可以使用nativehttps://sailsjs.com/documentation/reference/waterline-orm/models/native ),如果你使用的是Sails <1或者managerhttps:/ /sailsjs.com/documentation/reference/waterline-orm/datastores/manager )如果你使用Sails> = 1

这样,您可以使用您的数据库能够构建此类“更高级”查询的任何内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM