2013-08-13 4 views
1

У меня есть база данных Neo4j, содержащая информацию о конгрессменах. Проблема, с которой я столкнулась, - это вакансия. Когда это произойдет, я использую тот же ключ: значение в индексе «Конгрессменов». Я попытался код ниже, поскольку в документации py2neo говорится, что функция добавить идемпотентнаpy2neo создать функцию, создающую дублирующие узлы

#Check if we have any vacancies and if so if they match the one that we currently want to add 
    query="start n=node:Congressmen('website:N/A') return n" 
    result= cypher.execute(graph_db, query.encode('utf-8', errors='ignore')) 

    #Match what we already have 
    if str(result[0]) != "[]": 
     #create is idempotent so will only create a new node if properties are different 
     rep, = graph_db.create({"name" : userName, "website" : web, "district" : int(district), "state" : child[2].text, "party" : child[4].text, "office" : child[5].text, "phone" : child[6].text, "house" : "House of Representatives"}) 
     cong = graph_db.get_or_create_index(neo4j.Node, "Congressmen") 

     # add the node to the index 
     cong.add("website", web, rep) 

Когда я проверил интерфейс после запуска кода 3 раза у меня есть повторяющиеся узлы. enter image description here

Возможно ли предотвратить дублирование узлов и по-прежнему их индексировать с использованием одного и того же ключа/значения?

ответ

2

Метод Index.add, безусловно, идемпотент: один и тот же объект может быть добавлен только один раз в конкретную точку входа. Метод GraphDatabaseService.create нет. Каждый раз, когда вы запускаете метод create, создается новый узел, и каждый запуск add добавляет этот новый узел в индекс. Вероятно, вы, скорее всего, захотите использовать методы Index.add_if_none, Index.create_if_none или Index.get_or_create.

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