2015-10-21 38 views
1

我有一個視圖,爲我過濾出的數據。我想在我的搜索條件中添加一個檢查=>如果文檔中不存在字段,請不要考慮該文檔。Couchbase的意見查詢

這裏是我的看法代碼,studentId可能不存在於所有文件中。

function (doc, meta) { 
    if(meta.id && meta.id.indexOf("DOCUMENT_") == 0 && doc.studentId != null) { 
    emit([doc.studentId, doc.studentStatus, doc.studentName], null); 
    } 
} 

任何指針?

+0

你的問題是什麼,你能更精確嗎? –

+0

@JulianGo - 這是=>我想在我的搜索條件中添加一個檢查=>如果一個字段不存在於文檔中,請不要考慮該文檔。 – Deepak

+0

那麼你的代碼應該做的伎倆...看到FuzzyAmi的改進答案。也許你還希望你studentId測試只是'if(doc.studentId && meta.id.indexOf(「DOCUMENT_」)== 0)'? –

回答

2

在你的代碼,只需使用你的if語句之前使用的相同的語法:

if(doc.studentId && meta.id && meta.id.indexOf("DOCUMENT_") == 0) ...

注意以下

if(doc.studentId ...

will如果studentId 定義爲,則返回true,否則返回false。

0

只是一個小小的優化 - 如果桶中的許多文檔都缺少它,您可能需要將doc.studentId移動到條件的開頭。

另外,不是所有的文檔都有meta.id?似乎不可思議來測試它...

+0

meta.id在所有文檔中都有。 – Deepak

+0

還有一件事:視圖很棒,但不要依賴它們來爲您帶來最新的數據:它們甚至可能會返回已被刪除的數據。如果您訪問的文檔不是很大,而且您想要最新的數據(尤其是如果您的文檔經常被刪除),則應該將文檔附加到視圖而不是發出所需的字段。這會增加結果的準確性(確保刪除的項目不被檢索等) – FuzzyAmi

+0

@fuzzyami:或使用Stale = false查詢視圖 –