是否可以在CouchDB中使用類似的查詢?喜歡用兩個鍵?CouchDB和多個鍵
SELECT field FROM table WHERE value1="key1" OR value2="key2"
我總是隻用一個鍵。
function(doc) {
emit(doc.title, doc);
}
謝謝。
是否可以在CouchDB中使用類似的查詢?喜歡用兩個鍵?CouchDB和多個鍵
SELECT field FROM table WHERE value1="key1" OR value2="key2"
我總是隻用一個鍵。
function(doc) {
emit(doc.title, doc);
}
謝謝。
是的。如果我理解你的問題,像這樣的應該做的伎倆:
function(doc) {
a = (doc.value1 && doc.value1 == "key1");
b = (doc.value2 && doc.value2 == "key2");
if (a || b) {
emit(doc._id,doc.title);
}
}
只發出你需要的文件或值。
在CouchDB中0.9和上面可以張貼到視圖(或_all_docs)與身體像:
{"keys": ["key1", "key2", ...]}
爲了檢索該組與匹配鍵的行的。
這不回答這個問題。一旦你找到了你想要的文件,這只是得到文件。訣竅是搞清楚你想要的文件清單。 – 2011-11-16 18:09:27
你能做到這一點DOC值(假設你要「動態參數「)通過使用2個單獨的視圖和一個小小的客戶端處理:
您將有一個視圖」field1「,您將查詢」value1「。 (獲取文檔ID列表)
然後,您查詢「field2」上的第二個視圖,傳遞「value2」,並獲取Doc ID的另一個列表。現在
,你只需要找到該ID號 的2所列出的「交叉點」(作爲練習留給讀者)
它只是不適用於大量的數據。交集是O(n log n),它會使客戶窒息足夠的結果 – Andrea 2012-05-31 08:15:03
您可以創建這樣一個觀點:
function(doc){
if(doc.value1) emit(doc.value1, doc.field);
if(doc.value2) emit(doc.value2, doc.field);
}
然後使用llasram的建議發佈到與視圖查詢它:
{"keys": ["key1", "key2", ...]}
您的客戶將不得不警惕了DUP雖然。 doc.value1 ==「key1」& & doc.value2 ==「key2」的文檔將顯示兩次。只需使用_id來過濾結果。
一個需要擴大一點llasram的答案;該指數必須包含值這兩個領域:
function(doc) {
emit("value1:"+doc.value1); // add check for undefined, null, etc.
emit("value2:"+doc.value2);
}
然後用
keys=["value1:key1","value2:key2"]
編輯查詢:這將同一文件多次舉報但如果它包含的匹配值+密鑰對。
嗯,當然,如果你事先知道「key1」和「key2」,但是如果你想讓他們成爲「動態」參數呢? – 2011-11-16 18:01:39