簡體   English   中英

CouchDB視圖:按時間刪除重復*和*順序

[英]CouchDB Views: remove duplicates *and* order by time

根據我之前的問題的一個很好的答案,我已經部分解決了我與CouchDB的問題。

這導致了一種新觀點

現在,我需要做的下一件事是按日期排序時從此視圖中刪除重復項。

例如,以下是我查詢該視圖的方式:

GET http://scoates-test.couchone.com/follow/_design/asset/_view/by_userid_following?endkey=[%22c988a29740241c7d20fc7974be05ec54%22]&startkey=[%22c988a29740241c7d20fc7974be05ec54%22,{}]&descending=true&limit=3

結果如下:

HTTP 200 http://scoates-test.couchone.com/follow/_design/asset/_view/by_userid_following
http://scoates-test.couchone.com > $_.json.rows
[ { id: 'c988a29740241c7d20fc7974be067295'
  , key: 
     [ 'c988a29740241c7d20fc7974be05ec54'
     , '2010-11-26T17:00:00.000Z'
     , 'clementine'
     ]
  , value: 
     { _id: 'c988a29740241c7d20fc7974be062ee8'
     , owner: 'c988a29740241c7d20fc7974be05f67d'
     }
  }
, { id: 'c988a29740241c7d20fc7974be068278'
  , key: 
 [ 'c988a29740241c7d20fc7974be05ec54'
     , '2010-11-26T15:00:00.000Z'
     , 'durian'
     ]
  , value: 
     { _id: 'c988a29740241c7d20fc7974be065115'
     , owner: 'c988a29740241c7d20fc7974be060bb4'
     }
  }
, { id: 'c988a29740241c7d20fc7974be068026'
  , key: 
     [ 'c988a29740241c7d20fc7974be05ec54'
     , '2010-11-26T14:00:00.000Z'
     , 'clementine'
     ]
  , value: 
     { _id: 'c988a29740241c7d20fc7974be063b6d'
     , owner: 'c988a29740241c7d20fc7974be05ff71'
     }
  }
]

如你所見,“克萊門汀”出現了兩次。

如果我更改視圖以將水果/資產名稱作為第二個鍵(而不是時間)發出,我可以更改分組深度以折疊這些,但這並不能解決我的按時間順序要求。 類似地,通過上面的設置,我可以按時間排序,但我不能將重復的資產名稱折疊成單行(例如,允許每頁10個資產)。

不幸的是,這不是一個簡單的問題需要解釋。 也許這個聊天記錄會有所幫助。

請幫忙。 我擔心我需要做的事情仍然是不可能的。

小號

您可以使用列表功能執行此操作。 下面是一個生成一個非常簡單的列表的示例,其中包含所有沒有dupes的所有者字段。 您可以輕松地修改它以生成json或xml或任何您想要的東西。

將它放入lists.nodupes中的資產設計文檔中並使用如下: http:// admin:123@127.0.0.1:5984 / follow / _design / assets / _list / nodupes / by_userid_following_reduce?group = true

function(head, req) {
    start({
          "headers": {
          "Content-Type": "text/html"
          }
         });
    var row;
    var dupes = [];
    while(row = getRow()) {
    if (dupes.indexOf(row.key[2]) == -1) {
        dupes.push(row.key[2]);
        send(row.value[0].owner+"<br>");
    }
    } 
}

按一個字段排序並在另一個字段上單獨排列不是基本地圖縮減可以做的事情。 它所能做的就是對數據進行排序,並將減少匯總應用於動態鍵范圍。

要查找每種水果的最新條目,您需要每個水果查詢一次。

有一些方法可以做到這一點有點理智。

你需要一個像[fruit_type,date]這樣的鍵的視圖,然后你可以像這樣查詢:

for fruit in fruits
  GET /db/_design/foo/_view/bar?startkey=["apples"]&limit=1&descending=true

這將為您提供每種水果的最新條目。

列表操作可用於執行此操作,它只會回顯每個水果塊的第一行。 只要每個水果具有少量條目,這就足夠有效。 一旦每個水果有很多條目,你將丟棄比你回聲更多的數據,因此當你到達一個大型數據集時,多查詢方法實際上比列表方法更好。 幸運的是,他們都可以在相同的視圖索引上工作,所以當你不得不切換時,這不會是一個大問題。

暫無
暫無

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

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