使用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"
感謝您的答案。如果我想使用WHERE子句,那麼我該如何給出這個條件? – Sakalya
如果您使用視圖,則需要發出要查詢的密鑰(如果您使用的是WHERE),然後使用複雜鍵[「HR」,「John」]進行查詢。否則,如果您想要獲取查看 –
感謝您的耐心等待。我的要求是我們使用where子句WHERE role ='developer'和「包含HR作爲其名稱的部門」的方式。您可以幫我解決這個問題 – Sakalya