簡體   English   中英

Couchbase視圖自定義減少

[英]Couchbase view custom reduce

我不確定問題的標題是否合適,如果您知道更好的問題,讓我知道;)我只是這樣命名,因為我在考慮是否可以使用自定義的reduce函數解決問題。

我有兩種類型的對象:

車輛:

{
  "id": "1G1JC5444R7252367",
  "type": "Vehicle"
}

用戶:

{
  "company": "companyname",
  "type": "User",
  "parts": [
    {
      "company": "companyname",
      "id": "1G1JC5444R7252367",
      "active": true
    },
    {
      "company": "companyname",
      "id": "1G1135644R7252367",
      "active": false
    }
  ]
}

我想要的是一個View,可以將某家公司的所有車輛退還給我。 但是公司僅存儲在User對象中。

這是我進入map函數的距離:

function (doc, meta) {
  if(doc.type == 'User'){
    if(doc.parts){

      Array.prototype.contains = function ( needle ) {
        for (var i in this) {
          if (this[i] == needle) return true;
        }
        return false;
      };

      var ids = new Array(doc.parts.length);

      for(var k in doc.parts){
        if(doc.parts[k].active) {
          if(!vins.contains(doc.parts[k].id)) {
            if (doc.parts[k].company && doc.parts[k].id ) {
              ids.push(doc.parts[k].id);
              emit(doc.parts[k].company, doc.parts[k].id);
            }
          }
        }
      }
    }
  }
}

但這僅將公司作為密鑰返回給我,將車輛的ID作為值返回給我。 所以我得到了一個用戶文檔。 我可以以某種方式再次遍歷map函數中的文檔並根據id數組中的id獲取所有車輛嗎?

也不希望將公司保存在車輛本身中,因為該公司不是車輛公司本身,而是零件公司。

感謝您的轉發幫助。

Couchbase視圖只能對呈現給它的文檔進行操作。 如您所見,它只能部分完成您想要的操作。

真正的問題不是視圖,而是您的數據模型。 您似乎在設計數據模型,就好像您在使用關系數據庫一樣。 您嘗試的計算是一種聯接。

文檔數據庫的基本概念是,文檔應代表與某種事件有關的所有信息。 這個概念使文檔數據庫可以水平擴展。 您不必擔心數據重復。 訪問的位置是適當的map-reduce數據模型的關鍵。

我會重新設計您的數據模型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM