Как я могу получить вершины с отношениями и связанными вершинами в Neo4j 1.9RC1 через Gremlin

Neo4j будет поддерживать шаблон дерева в версиях 2.x (мы не могли использовать функцию дерева). Мы используем 1.9RC1.

Мне нужно получить пользователей с подписчиками и друзьями.

public class User
{
    public long Id { get; set; }
    public string Name { get; set; }
    ...............
}

public class UserModel
{
    public long Id { get; set; }
    public string Name { get; set; }
    public string DetailedInformation { get; set; }
    public IEnumerable<UserModel2> Followers { get; set; }
    public IEnumerable<UserModel2> Friends{ get; set; }
}

public class UserModel2
{
    public long Id { get; set; }
    public string Name { get; set; }
}

Я хочу получить ответ UserModel с древовидной структурой. Как можно сделать через Gremlin..

Мы использовали функцию путей.

g.v(4582).inE.outV.paths{it}

Но для него существует проблема дублирования данных. Он возвращает пути, а не дерево.

PS: мы используем C#.


person ozz    schedule 23.04.2013    source источник


Ответы (1)


Если вы посмотрите, как реализовано tree(), это просто path(), агрегированный в точках соединения. Точки соединения — это вершины на одной глубине. Таким образом, вы можете создать свою собственную древовидную структуру данных из результатов path() (--или paths() в старых версиях Gremlin). Позвольте мне объяснить, как это реализовать на примере. Если у вас есть набор таких путей:

[1,2,3,4]
[1,3,5,6]
[1,2,3,5]

Тогда представление дерева будет таким:

      4
     /
  2-3
 /   \
1     5
 \
  3-5-6

Разумное использование встроенных HashMaps обеспечит желаемую функциональность. Пожалуйста, просмотрите кодовую базу Pipes 2.x, чтобы увидеть, как реализовано дерево, и скопируйте (и настройте) в соответствии с вашими потребностями.

person Marko A. Rodriguez    schedule 23.04.2013
comment
g.v(4582).inE.outV.paths{it} возвращает матрицу, которую вы написали. Но есть проблема с дублированием данных. Я проверю HashMaps. Спасибо. - person ozz; 24.04.2013
comment
Кажется, что с Neo4J этого практически не добиться... А вот с титаном вроде все хорошо. @marko, какая дата выпуска титана 0.3.1? (я думаю, .1 означает готовность к производству) - person ozz; 07.05.2013