2015-09-04 40 views
1

這是我保存在我的桶的樣本文件之一,Couchbase得到指定日期範圍內的文件與主要

{ 
    "id": "639882607203778560", 
    "text": "How does Andy Reid describe the no WR touchdown stat?", 
    "name": "chiefs", 
    "createdAt": 1441394876000, 
} 

我需要獲取給定的名字和日期範圍的文件。因此,這是我爲它創建的視圖,

function (doc, meta) { 
    if (doc._class == "com.link.data" && doc.createdAt && doc.name) { 
    emit([doc.createdAt,doc.name], null); 
    } 
} 

這會給我要定日期範圍內的所有文件,但它並不過濾器的基礎上的名字。我也有所有其他文件的文件。我怎樣才能做到這一點?還有什麼是正確的實施的Java?

這是我當前的impl,我想在不使用N1ql的情況下執行此操作。

query.setRange(ComplexKey.of(1441376400000L, name), ComplexKey.of(1441396800000L,name)); 

我試圖將範圍作爲startKey和endKey添加。然後將該名稱作爲key在couchbase UI中,它不起作用。

回答

1

聲明:我沒有很多關於CB中複合/複雜鍵的經驗。

我相信你所要求的是不能用單個視圖完成的:按日期排序,然後按特定名稱篩選。您可以可以按範圍排序然後按名稱排序,但您仍然可以獲得桶中的所有不同名稱(正如您已經注意到的)。

什麼你可以做的是使用兩個獨立的意見,然後相交結果:獲得DOC-IDS你想要的名稱,得到你想要的範圍內,文檔和發現在Java代碼中的交點。由於視圖只是'最終一致的',因此您的結果與單個視圖請求一樣好,所以您在這裏浪費的唯一東西是帶寬和一點時間,但不是結果精度。

0

「給定」意味着完全匹配? 如果你想獲得與日期範圍精確匹配的名稱造成的,嘗試發射()有:

emit([doc.name, doc.createdAt], null); 

按鍵陣列本身,在EMIT 1 ARG()函數,就是排序順序。

相關問題