[英]py2neo (1.6) how to get an existing node by node property without CypherQuery
[英]py2neo how to retrieve a node based on node's property?
我找到了相關的方法:
find
- 不起作用,因為此版本的neo4j
不支持標簽。 match
- 不起作用,因為我無法指定關系,因為該節點還沒有關系。 match_one
- 與match
相同。 node
- 不起作用,因為我不知道節點的id。 我需要相當於:
start n = node(*) where n.name? = "wvxvw" return n;
Cypher查詢。 看起來它應該是基本的,但它確實不是......
PS。 我反對使用Cypher提出太多理由。 所以這也不是一個選擇。
那么,您應該創建索引,以便減少起始節點。 這將通過使用標簽自動處理,但與此同時,可以解決這個問題。
現在,在搜索時,您可以編寫以下查詢:
START n = node:label(key_name='Person') WHERE n.name = 'wvxvw' RETURN n; //key_name is the key's name you will assign while creating the node.
user797257似乎已退出游戲,但我認為這仍然有用:
如果要獲取節點,則需要創建索引。 Neo4j中的索引與MySQL或任何其他數據庫中的索引相同(如果我理解正確的話)。 標簽基本上是自動索引,但索引提供了額外的速度。 (我同時使用)。
在某個地方,或在neo4j本身創建一個索引:
index = graph_db.get_or_create_index(neo4j.Node, "index_name")
然后,像往常一樣創建節點,但是將其添加到索引中:
new_node = batch.create(node({"key":"value"}))
batch.add_indexed_node(index, "key", "value", new_node)
現在,如果您需要找到new_node,請執行以下命令:
new_node_ref = index.get("key", "value")
這將返回一個列表。 new_node_ref[0]
具有頂部項目,以防您希望/期望單個節點。
使用selector從圖中獲取節點以下代碼從與搜索匹配的節點列表中獲取第一個節點
selector = NodeSelector(graph)
node = selector.select("Label",key='value')
nodelist=list(node)
m_node=node.first()
使用py2neo
,這個hacky函數將迭代屬性和值,並逐漸消除所有與提交的每個條件不匹配的節點。 最終結果將是與所有提供的屬性和標簽匹配的所有(如果有)節點的列表。
def find_multiProp(graph, *labels, **properties):
results = None
for l in labels:
for k,v in properties.iteritems():
if results == None:
genNodes = lambda l,k,v: graph.find(l, property_key=k, property_value=v)
results = [r for r in genNodes(l,k,v)]
continue
prevResults = results
results = [n for n in genNodes(l,k,v) if n in prevResults]
return results
看到我創建一個接受多個屬性的merge_one()
其他答案 ......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.