2013-02-06 44 views
2

我正在尋找一個存儲桶中的特定JSON文檔,我不知道它的文檔ID,我只知道其中一個子鍵的值。我已經通過API文檔看了,但仍然感到困惑,當涉及到我的特殊用例:將參數傳遞到couchbase視圖

在蒙戈我可以做一個動態查詢:

bucket.get({ "name" : "some-arbritrary-name-here" }) 

隨着couchbase我的印象是,你需要創建一個索引(例如在name屬性上)並使用startKey/endKey,但這種感覺是錯誤的 - 你是否仍然會返回多個文檔?很高興能夠將參數傳遞給可以執行完全匹配的視圖。另外我們將如何處理多維搜索?即名稱和類別。

我希望儘可能在couchbase實例上進行儘可能多的過濾,並理想地將其縮小到一條記錄,而不是在它回到應用層時進行過濾。就像將一個動態值傳遞給映射函數並僅發送匹配的文檔。

我知道你可以使用LINQ與couchbase過濾,但如果我已經正確地閱讀了文檔,這個過濾仍然是客戶端完成的,但至少如果我們能夠縮小返回的數據集到一個合理的子集,客戶端過濾不會是這樣的大不了。

乾杯

回答

0

那麼,你是在一個點上是正確的,你需要創建一個視圖(事實上索引),以能夠查詢上的JSON文件的內容。所以在你

情況下,你必須創建具有這種代碼視圖:

function (doc, meta) { 
if (doc.type == "youtype") { // just a good practice to type the doc 
    emit(doc.name); 
} 
} 

因此,這將創建一個索引 - 分佈式集羣中的所有節點上 - 你現在可以使用你的應用。您可以使用「鍵」參數指向特定值

+0

這是否意味着您只能通過文檔名稱本身檢索文檔,即在服務器端沒有動態查詢來過濾結果,除非您事先知道標準和爲它創建一個視圖? 這很好,如果是這樣的話,只是想找出我們的選擇 – managedheap84

+1

您可以創建一個複合鍵[v1,v2,v3]並對其進行一些操作(請參閱http://blog.couchbase.com/understanding -grouplevel-view-queries-compound-keys),但不能在當前版本的Couchbase 2.0中的多個「屬性」上進行查詢。在許多數據庫中,當執行「動態」查詢時,這些查詢在大型系統/羣集上部署時無法擴展......我們有一些項目正在使用Elasticsearch插件來提供更高級的功能:http://blog.couchbase.com/couchbase-插件 - elasticsearch-現在-β –