2017-11-18 121 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和然后,用你提供的 '真' 或 '假' 值代替它。