2015-11-06 7 views
1

Я совершенно новый для neo4j, а также для построения db, который состоит из > 10M узлов. Во время операций запроса я хочу найти узел, используя два properties. Например: node - name: xxx surname: yyy id:1 во время операции запроса Мне нужно получить узел id, который name: xxx, surname: yyy. Как это возможно с помощью java-запроса (а не cypher)? И будет доступно более одной записи с заданными свойствами.Как читать свойства узла в neo4j?

ответ

1

Вот пример того, как найти идентификаторы:

GraphDatabaseService database; 

Label label = DynamicLabel.label("your_label_name"); 
String propertyId = "id"; 
String propertyName = "name"; 
String propertySurname = "surname"; 

public Set<Node> getIdsForPeople(Set<Person> people) { 

    Set<String> ids = new HashSet<>(); 

    try(Transaction tx = database.beginTx()) { 
     for (Person person in people) { 
      Node node = database.findNode(label, propertyName, person.getName()); 

      if (node.hasProperty(propertySurname)) { 
       if (node.getProperty(propertySurname) == person.getSurname()) { 
        String id = node.getProperty(propertyId).toString(); 

        ids.add(id); 
       } 
      } 
     } 

     tx.success(); 
    } 

    return ids; 
} 

держатель Person

public class Person { 

    private final String name; 
    private final String surname; 

    public Person(String name, String surname) { 
     this.name = name; 
     this.surname = surname; 
    } 

    public String getName() { return name; } 
    public String getSurname() { return surname; } 
} 

пример

Set<Person> people = new HashSet<Person>(){{ 
    add(new Person("xxx1", "yyy1")); 
    add(new Person("xxx2", "yyy2")); 
    add(new Person("xxx3", "yyy3"); 
    add(new Person("xxx4", "yyy4"); 
}}; 

Set<String> ids = getIdsForPeople(people); 
+0

, если есть более чем одна запись с заданными характеристиками, что я должен делать ? –

+0

@RaufAgayev обновлено – MicTech

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