2014-09-19 3 views
0

Учитывая следующий результат в моем шифровальщика запросе, где люди коллекция:Cypher агрегации и собирать

[ 
    { 
     "people": [ 
     { 
      "id": 24749, 
      "matches": 1 
     }, 
     { 
      "id": 26026, 
      "matches": 1 
     }, 
     { 
      "id": 26223, 
      "matches": 1 
     }, 
     { 
      "id": 25121, 
      "matches": 1 
     }, 
     { 
      "id": 24632, 
      "matches": 1 
     }, 
     { 
      "id": 25708, 
      "matches": 1 
     }, 
     { 
      "id": 25182, 
      "matches": 1 
     }, 
     { 
      "id": 24826, 
      "matches": 1 
     }, 
     { 
      "id": 26186, 
      "matches": 1 
     }, 
     { 
      "id": 27001, 
      "matches": 1 
     }, 
     { 
      "id": 24243, 
      "matches": 1 
     }, 
     { 
      "id": 27255, 
      "matches": 1 
     }, 
     { 
      "id": 27145, 
      "matches": 1 
     }, 
     { 
      "id": 24126, 
      "matches": 1 
     }, 
     { 
      "id": 27463, 
      "matches": 1 
     }, 
     { 
      "id": 24069, 
      "matches": 1 
     }, 
     { 
      "id": 25210, 
      "matches": 1 
     }, 
     { 
      "id": 24994, 
      "matches": 1 
     }, 
     { 
      "id": 27331, 
      "matches": 1 
     }, 
     { 
      "id": 25793, 
      "matches": 1 
     }, 
     { 
      "id": 27312, 
      "matches": 1 
     }, 
     { 
      "id": 26206, 
      "matches": 1 
     }, 
     { 
      "id": 24252, 
      "matches": 1 
     }, 
     { 
      "id": 24714, 
      "matches": 2 
     }, 
     { 
      "id": 24612, 
      "matches": 1 
     }, 
     { 
      "id": 26964, 
      "matches": 1 
     }, 
     { 
      "id": 27101, 
      "matches": 1 
     }, 
     { 
      "id": 26730, 
      "matches": 1 
     }, 
     { 
      "id": 27211, 
      "matches": 1 
     }, 
     { 
      "id": 24783, 
      "matches": 2 
     }, 
     { 
      "id": 25336, 
      "matches": 1 
     }, 
     { 
      "id": 24128, 
      "matches": 1 
     }, 
     { 
      "id": 26186, 
      "matches": 1 
     }, 
     { 
      "id": 25125, 
      "matches": 2 
     }, 
     { 
      "id": 24069, 
      "matches": 3 
     }, 
     { 
      "id": 24607, 
      "matches": 1 
     }, 
     { 
      "id": 27055, 
      "matches": 1 
     }, 
     { 
      "id": 25336, 
      "matches": 3 
     }, 
     { 
      "id": 24128, 
      "matches": 2 
     }, 
     { 
      "id": 26716, 
      "matches": 1 
     }, 
     { 
      "id": 27331, 
      "matches": 1 
     }, 
     { 
      "id": 24069, 
      "matches": 1 
     } 
     ] 
    } 
] 

Как я могу (с шифром) итерацию сбора людей и найти те, которые с тем же «ID» , суммируйте элементы «match» вместе, а затем добавьте новый элемент, называемый «дубликаты» или аналогичный.

Пример результата я пытаюсь получить:

[ 
    { 
    "people": [ 
     { 
     "id": 24069, 
     "matches": 5, // all the "matches" of the duplicate 24069's added together 
     "duplicates": 3 // how may times the id 24069 was found in the collection called people 
     }, 

     // etc... 
    ] 
    } 
] 
+0

Каков ваш текущий запрос на шифр? –

ответ

0

Запрос:

матч (р: люди) возвращают отчетливый (p.id), сумма (p.matches)

, вероятно, следует дать вам то, что вам нужно

0

Это своего рода сложно, так как самый простой способ для чая Разместите свою коллекцию и соберите ее. Это много шагов, но вот Cypher делает это, а также комментарии о том, что делают каждый шаг.

// initial matching (whatever you match on to get your collection) 
MATCH (n:People) WITH collect(n) as people 

// Tear people collection apart for possessing 
UNWIND people as p 

// Reduce on id 
WITH COLLECT(DISTINCT p.id) as id, p.matches as m 

// For each id, sum and count the matches 
WITH {id:id, matches:SUM(m), duplicates:COUNT(m)} as people 

// Recollect rows into collection 
RETURN COLLECT(people) as people 
Смежные вопросы