簡體   English   中英

2 collections 之間的 ARANGO DB 關系

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM