[英]ARANGO DB relation between 2 collections
我需要知道如何在 arangoDB 中獲取主子關系。 我有一個名為 user 的以下文檔集合,如下所示
{
"firstName": "dasdsa",
"lastName": "Deshpande",
"emailAddress": "Abc@GAURAV.CO.IN",
"password": "aA@1234",
"applicationId": [
180031,
180091
],
"isActiveUser": "false",
"isAdminUser": "false",
}
和名為 application 的第二個文檔集合
{
"id":"180031",
"applicationName": "firstApp",
"description": "first app description"
}
{
"id":"180091
",
"applicationName": "secondApp",
"description": "first app description"
}
我想根據標記給用戶的應用程序 ID 檢索應用程序名稱。 在這種情況下,我想檢索 firstApp 和 secondApp。
你還沒有提到你想如何做到這一點,所以我將假設 AQL。
首先,您的數據 model 有問題。 您的用戶文檔將數字數組存儲為applicationId
屬性,但應用程序文檔有一個id
屬性,它是一個string 。 數據類型應該匹配,否則你不能在沒有類型轉換的情況下加入它們(這可能導致索引未被使用)。
其次,我想知道您為什么選擇將應用程序 ID 存儲為id
屬性而不是默認索引的_key
屬性(主索引)。 我假設每個應用程序 ID 在整個集合中只出現一次並且以后不會更改? 如果是這樣,請考慮將應用程序 ID 作為字符串存儲在_key
屬性中。 否則為id
屬性創建適當的索引。
對於實際查詢:有兩種主要方法可以加入 collections,或者使用DOCUMENT()
function 來解析 ID,或者使用帶有 FILTER 的附加 FOR 循環。 但是請注意,您需要將應用程序 ID 存儲為文檔_key
,以便能夠使用DOCUMENT()
的第一種方法查找應用程序。 嵌套的 FOR 循環方法更靈活,允許您使用任何屬性查找文檔,包括未編入索引的文檔(但這可能會導致性能下降)。
FOR u IN user
FILTER u.emailAddress == "Abc@GAURAV.CO.IN"
RETURN { user: u, applications: DOCUMENT("application", u.applicationId) }
我在 email 地址上使用 FILTER 到 select 用戶文檔。 這也可以在不同的屬性上或使用LET u = DOCUMENT("user/<document-key>")
。 DOCUMENT()
function 的第一個參數是目標集合名稱,第二個參數是文檔_keys
(應用程序ID)的數組。
如果要保留存儲在id
屬性中的應用程序 ID,可以使用以下查詢:
FOR u IN user
FILTER u.emailAddress == "Abc@GAURAV.CO.IN"
LET applications = (FOR a IN application
FILTER a.id IN u.applicationId
RETURN a
)
RETURN { user: u, applications }
如果您將 ID 存儲為文檔鍵,則同樣的查詢也可以工作,只需將條件替換為FILTER a._key IN u.applicationId
。 但是由於您可以在這種情況下使用DOCUMENT() function ,我寧願使用它,因為它更簡單。
這在 AQL 教程 BTW 中有很好的描述:
https://www.arangodb.com/docs/stable/aql/tutorial-join.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.