2016-09-20 6 views
0

У меня есть график, как это:ArangoDB - Помощь по ДУК 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') 

Выход:

[ 
    { 
    "_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 
    } 
] 

Это означает, что Foo и бар ответили два общих вопросов (A & C), но они дал тот же ответ только на один вопрос (А).

Как написать AQL для возврата той же информации в следующем формате?

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

Я боюсь здесь, но безуспешно, поэтому любая помощь будет оценена по достоинству.

Спасибо!

  • Edit: Я забыл упомянуть, что все вопросы множественного выбора, только с двумя альтернативами: 0 или 1. Таким образом, answer.chosen представляют выбор пользователя.

ответ

0

Я закончил с этим запросом:

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) 
} 

Однако я хотел бы найти решение проще.

 Смежные вопросы

  • Нет связанных вопросов^_^