【问题标题】:Aggregate nested model data in Sails.JS/Waterline在 Sails.JS/Waterline 中聚合嵌套模型数据
【发布时间】:2015-06-03 03:03:31
【问题描述】:

我正在为将业务逻辑放在 SailsJS 项目中的哪个位置而苦苦挣扎。

我的数据模型如下:

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

我正在寻找使用父模型上的计算属性聚合子数据,该父模型一直级联到 Portfolio。例如,资产知道最新的报价(价格),头寸知道其当前价格(numberShares * 其资产的最新报价)等。理想情况下,我想将此数据添加到 JSON,以便我可以将业务逻辑从 Ember 客户端移开.

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

资产.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;
}

这有效(在添加 typeof 检查后取决于它是否嵌套返回它不起作用)。

现在在 Position.js

 assetID:{
      model: "Asset",
    },

我要计算currentValue:

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

    },

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

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

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

【问题讨论】:

    标签: javascript node.js sails.js waterline


    【解决方案1】:

    Waterline 不支持深度填充。如果你想实现这样的深度查询,如果你使用 Sails native (https://sailsjs.com/documentation/reference/waterline-orm/models/native),如果你使用 Sails >= 1,你可以使用 manager (https://sailsjs.com/documentation/reference/waterline-orm/datastores/manager)

    这样您就可以使用您的数据库能够构建这种“更高级”的查询。

    【讨论】:

      猜你喜欢
      • 2014-07-24
      • 1970-01-01
      • 2014-12-19
      • 2014-02-14
      • 1970-01-01
      • 2018-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多