2016-09-20 5 views
0

Ich habe ein Diagramm wie folgt aus:ArangoDB - Hilfe zur AQL Aggregation

// [user] -answer-> [question] 

for u in user 
    filter u._id in ['user/foo', 'user/bar'] 
    for v, e in 1 outbound u graph 'qaGraph' 
     return keep(e, '_from', '_to', 'chosen') 

Ausgang:

[ 
    { 
    "_from": "user/foo", 
    "_to": "question/A", 
    "chosen": 0 
    }, 
    { 
    "_from": "user/foo", 
    "_to": "question/B", 
    "chosen": 0 
    }, 
    { 
    "_from": "user/foo", 
    "_to": "question/C", 
    "chosen": 1 
    }, 
    { 
    "_from": "user/bar", 
    "_to": "question/A", 
    "chosen": 0 
    }, 
    { 
    "_from": "user/bar", 
    "_to": "question/C", 
    "chosen": 0 
    } 
] 

Das bedeutet, dass foo und bar haben zwei Fragen gemeinsam beantwortet (A & C), aber sie gab dieselbe Antwort nur auf eine Frage (A).

Wie kann ich eine AQL schreiben, um dieselben Informationen im folgenden Format zurückzugeben?

{ 
    "questions": 2, 
    "match": 1 
} 

Ich kämpfe hier aber ohne Erfolg, so würde jede Hilfe geschätzt werden.

Danke!

  • Edit: Ich vergaß zu erwähnen, dass alle Fragen Multiple-Choice sind, mit nur zwei Alternativen: 0 oder 1. So answer.chosen repräsentieren die Auswahl des Benutzers.

Antwort

0

landete ich mit dieser Abfrage nach oben:

let data = (
    for u in user 
     filter u._id in ['user/foo', 'user/bar'] 
     for v, e in 1 outbound u graph 'qaGraph' 
      collect question = e._to into answers = e.chosen 
      filter count(answers) == 2 // questions answered by both users 
      let match = sum(answers) != 1 ? 1 : 0 // flags same answer by both users 
      return {question, match} 
) 
return { 
    questions: count(data), 
    matches: sum(data[*].match) 
} 

Jedoch habe ich eine Lösung einfacher finden als das möchte.

Verwandte Themen