2016-10-24 66 views
0

我需要使用以下條件查詢CouchDB數據庫。 我有這樣查詢Couchbase數據庫其中

{ 
    "first Name" : "ABC", 
    "role" : "developer", 
    "department" : [ 
        { 
         "name" : "HR", 
         "country" : "Germany" 
        }, 
        { 
         "name" : "Finance", 
         "country" : "USA" 
        }, 
        { 
         "name" : "HR", 
         "country" : "USA" 
        } 
        ] 

} 

爲員工實體文檔如何獲取這些文件,其中部是「HR」在COuchbase?

回答

2

使用CouchBase,您可以使用視圖或索引。我爲您提供「地圖視圖」解決方案。

地圖功能應該是這樣的:

function(doc) { 
    if (doc.type === "employee") { 
     if (doc.department && doc.department.length) { 

      for (var i = 0; i < doc.department.length; i++) { 
       emit(doc.department[i].name); 
      } 
     } 
    } 
} 

注意此地圖功能我們鍵入 「員工」。強烈建議通過將文檔與關鍵字鏈接來將您的文檔分組,如同「表」一樣。例如,每個員工文檔都可以是「員工」類型。此外,這個映射函數將發出相同的密鑰兩次。您可以輕鬆更改JavaScript以僅發出唯一值,或者您可以使用減少功能。

要查詢視圖,你會做這樣的事情:

GET http://localhost:5984/dbname/_design/yourDesignName/_view/byDept?include_docs=true

輸出

{ 
    totalRows: 3, 
    rows: [{ 
     "id": "ABCEmployee", 
     "key": "HR", 
     "value": null, 
     "doc": { 
      "first Name": "ABC", 
      "role": "developer", 
      "department": [{ 
       "name": "HR", 
       "country": "Germany" 
      }, { 
       "name": "Finance", 
       "country": "USA" 
      }, { 
       "name": "HR", 
       "country": "USA" 
      }] 

     } 
    }, 
    { 
     "id": "ABCEmployee", 
     "key": "Finance", 
     "value": null, 
     "doc": { 
      "first Name": "ABC", 
      "role": "developer", 
      "department": [{ 
       "name": "HR", 
       "country": "Germany" 
      }, { 
       "name": "Finance", 
       "country": "USA" 
      }, { 
       "name": "HR", 
       "country": "USA" 
      }] 

     } 
    }, 
    { 
     "id": "ABCEmployee", 
     "key": "HR", 
     "value": null, 
     "doc": { 
      "first Name": "ABC", 
      "role": "developer", 
      "department": [{ 
       "name": "HR", 
       "country": "Germany" 
      }, { 
       "name": "Finance", 
       "country": "USA" 
      }, { 
       "name": "HR", 
       "country": "USA" 
      }] 

     } 
    }, 
    ] 

} 

如果您想查詢讓我們說,有部門的每個文件「HR」,請執行以下操作: GET http://localhost:5984/dbname/_design/yourDesignName/_view/byDept?include_docs=true&key="HR"

+0

感謝您的答案。如果我想使用WHERE子句,那麼我該如何給出這個條件? – Sakalya

+0

如果您使用視圖,則需要發出要查詢的密鑰(如果您使用的是WHERE),然後使用複雜鍵[「HR」,「John」]進行查詢。否則,如果您想要獲取查看 –

+0

感謝您的耐心等待。我的要求是我們使用where子句WHERE role ='developer'和「包含HR作爲其名稱的部門」的方式。您可以幫我解決這個問題 – Sakalya