簡體   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