2017-11-18 122 views
1

我想將3個集合的結果合併到單個集合中,但我無法合併最終結果的finishedStatus屬性。如何使用UPSERT合併數組?

最終的結果集合:

  • 只包含獨特的地位
  • 每個文件都能夠保持排序,使這個狀態
  • 合併finishedStatus再總結finishedStatus.count
  • (可選)機finishedStatus [*]。狀態

鑑於

收集阿

{"status": ["1","2","3"], "machine": "A", "finishedStatus": [{"status": "4", "count": 10}, {"status": "5", "count": 1}]} 
{"status": ["4","5","6"], "machine": "A", "finishedStatus": [{"status": "3", "count": 5}, {"status": "5", "count": 11}]} 

收集乙

{"status": ["1","2","3"], "machine": "B", "finishedStatus": [{"status": "1", "count": 3}, {"status": "5", "count": 14}]} 
{"status": ["2","5","2"], "machine": "B", "finishedStatus": [{"status": "5", "count": 5}, {"status": "3", "count": 5}]} 

類集c

{"status": ["2","5","2"], "machine": "C", "finishedStatus": [{"status": "5", "count": 2}, {"status": "3", "count": 5}]} 
{"status": ["3","2","1"], "machine": "C", "finishedStatus": [{"status": "2", "count": 6}, {"status": "4", "count": 7}]} 

收集結果

{"status": ["1","2","3"], "machine": ["A", "B"] , "finishedStatus": [{"status": "1", "count": 3}, {"status": "4", "count": 10}, {"status": "5", "count": 15}]} 
{"status": ["2","5","2"], "machine": ["B", "C"], "finishedStatus": [{"status": "5", "count": 7}, {"status": "3", "count": 10}]} 
{"status": ["3","2","1"], "machine": ["C"], "finishedStatus": [{"status": "2", "count": 6}, {"status": "4", "count": 7}]} 
{"status": ["4","5","6"], "machine": ["A"], "finishedStatus": [{"status": "3", "count": 5}, {"status": "5", "count": 11}]} 

如何編寫AQL INSERT/UPDATE/UPSERT以做出最終結果?

這是我的AQL

FOR doc IN A 
UPSERT {"status": doc.status} 
INSERT {"status": doc.status, "machine": [doc.machine], "finishedStatus": doc.finishedStatus} 
UPDATE { 
    "machine": APPEND(OLD.machine, doc.machine, true), 
    "finishedStatus": <-- I cannot write AQL to update finishedStatus 
    How to write AQL to update this property? 
} 
IN result 

謝謝

回答

2

這本直列如果AQL支持/ else格式:

FOR doc IN A 
UPSERT {"status": doc.status} 
INSERT {"status": doc.status, "machine": [doc.machine], "finishedStatus": doc.finishedStatus} 
UPDATE { 
    "machine": APPEND(OLD.machine, doc.machine, true), 
    "finishedStatus": (
    OLD.finishedStatus[i].status == doc.finishedStatus[i].status ? 
    SUM([OLD.finishedStatus[i].count, doc.finishedStatus[i].count]) : 
    APPEND(OLD.finishedStatus, doc.finishedStatus[i]) 
) 
} 
IN result 

我不能沒有你的數據集進行測試,但注意內聯的if-then-else格式。

(comparator ? is_true : is_false)

(a == 1 ? 'one' : 'not one')

AQL將評估的if-then-else和然後,用你提供的 '真' 或 '假' 值代替它。