ลบโหนดและความสัมพันธ์ทั้งหมดใน neo4j 1.8


92

ฉันรู้ว่าหลายคนถามคำถามนี้
สำหรับการวิจัยของฉันอยู่แล้วนี่คือคำถามที่ถามมาก่อน

  1. จะลบความสัมพันธ์ทั้งหมดในกราฟ neo4j ได้อย่างไร?
  2. https://groups.google.com/forum/#!topic/neo4j/lgIaESPgUgE

แต่สุดท้ายก็ยังไม่สามารถแก้ปัญหาของ
เราได้เราแค่ต้องการลบโหนด "ALL" และความสัมพันธ์ "ALL"

ป้อนคำอธิบายภาพที่นี่

สมมติว่าลบ "ALL" จะเห็นว่าเหลือ0 โหนด 0 คุณสมบัติและ 0 ความสัมพันธ์

นี่คือภาพหน้าจอที่ฉันถ่ายหลังจากดำเนินการลบ "ALL" ที่แนะนำโดยฟอรัม

คำถามของฉันยังคงเหมือนเดิมวิธีลบโหนดทั้งหมดและความสัมพันธ์ทั้งหมดใน neo4j

คำตอบ:


248

ตั้งแต่ 2.3.0 และสูงถึง 3.3.0

MATCH (n)
DETACH DELETE n

เอกสาร

ก่อน 2.3.0

MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r

เอกสาร


2
แม้ว่าตัวอย่างนี้ในเอกสาร Neo4j จะระบุว่า: "คำค้นหานี้ไม่ได้มีไว้สำหรับการลบข้อมูลจำนวนมาก แต่จะดีเมื่อเล่นกับชุดข้อมูลตัวอย่างขนาดเล็ก" สงสัยว่าจะดีกว่าถ้าทำ MATCH () - [r] - () DELETE r แล้วทำ MATCH (n) DELETE n
George Birbilis

2
@GeorgeBirbilis ในการดำเนินการนี้กับข้อมูลจำนวนมากการดำเนินการจะต้องถูกแบ่งออกจากธุรกรรมหลายรายการและต้องใช้กลไกการลองใหม่
Bob B

1
ไม่แน่ใจว่าจำเป็นต้องลองอีกครั้งหรือไม่ แต่สำหรับวิธีการทำซ้ำโปรดดูการตอบกลับโดย Stefan Armbruster ที่stackoverflow.com/questions/29711757/… (ฉันยังพูดถึงมันในตอนท้ายของลิงก์โพสต์บล็อกของฉันที่ฉันมีคำตอบแยกต่างหาก)
George Birbilis

คำถามคำตอบ 2.3 ใช้ไม่ได้สำหรับฉัน ข้อเสนอแนะ @GeorgeBirbilis ไม่
aliteralmind

@aliteralmind ตัดสินจากneo4j.com/docs/2.3.0/query-delete.htmlอาจเป็นปัญหาหลังจากนั้น) จำเป็นต้องขึ้นบรรทัดใหม่หรืออย่างน้อยก็ต้องใช้ช่องว่างเนื่องจากปัจจุบันเขียน ... ) DETACH ซึ่งดูเหมือน a พิมพ์ผิด (และอาจจะเก็บ DETACH DELETE ไว้ในบรรทัดเดียวกัน แต่ไม่แน่ใจว่าจำเป็นหรือไม่) โปรดทราบว่าบทความยังคงระบุว่า "คำค้นหานี้ไม่ได้มีไว้สำหรับการลบข้อมูลจำนวนมาก แต่จะดีเมื่อใช้กับชุดข้อมูลตัวอย่างขนาดเล็ก"
George Birbilis

6

คุณอาจทำถูกต้องมีเพียงแดชบอร์ดเท่านั้นที่แสดงเฉพาะ ID ที่สูงกว่าที่ได้รับดังนั้นจำนวนโหนดที่ "ใช้งานอยู่" ความสัมพันธ์แม้ว่าจะไม่มีเลยก็ตาม เป็นเพียงข้อมูล

เพื่อให้แน่ใจว่าคุณมีกราฟว่างให้รันคำสั่งนี้:

START n=node(*) return count(n);
START r=rel(*) return count(r);

หากทั้งคู่ให้ 0 คุณการลบของคุณก็ประสบความสำเร็จ


ใช่มันเป็นเรื่องจริง แต่แดชบอร์ดไม่แสดงไม่สูงกว่าหรือ ID สูงสุด
Huei Tan

ใช่นั่นเป็นวิธีที่พวกเขาตั้งโปรแกรมไว้ - เนื่องจากเมื่อคุณมีคลัสเตอร์ที่มีโหนดจำนวนมากคุณไม่ต้องการนับด้วยตนเอง แต่บางแห่งฉันเห็นใครบางคนเจาะลึกเรื่องนี้มากขึ้นและทำการแก้ไขจาวาสคริปต์บางทีถ้าคุณโชคดีคุณจะโพสต์ใน Google
ulkas

5

สำหรับฐานข้อมูลขนาดใหญ่คุณควรลบฐานข้อมูลออกจากดิสก์ (หลังจากที่คุณหยุดเครื่องยนต์ก่อนฉันเดา) หรือใช้ใน Cypher อย่างเช่น:

MATCH (n)
OPTIONAL MATCH (n)-[r]-()
WITH n,r LIMIT 50000
DELETE n,r
RETURN count(n) as deletedNodesCount

ดูhttps://zoomicon.wordpress.com/2015/04/18/howto-delete-all-nodes-and-relationships-from-neo4j-graph-database/สำหรับข้อมูลเพิ่มเติมที่ฉันรวบรวมจากคำตอบต่างๆ


3

Neo4j ไม่สามารถลบโหนดที่มีความสัมพันธ์ได้ คุณต้องลบความสัมพันธ์ก่อนจึงจะสามารถลบโหนดได้

แต่เป็นวิธีง่ายๆในการลบโหนด "ALL" และความสัมพันธ์ "ALL" ด้วย chyper แบบธรรมดา นี่คือรหัส:

การจับคู่ (n) การลบลบ n

-> ลบการลบจะลบโหนดและความสัมพันธ์ทั้งหมดโดย Match


0

หากชื่อโหนดเป็นตัวอย่าง: abcd ดังนั้นด้านล่างแบบสอบถามจะทำงาน:

MATCH (n:abcd)
DETACH DELETE n

การดำเนินการนี้จะลบเฉพาะโหนดที่มีป้ายกำกับ "abcd" และความสัมพันธ์ทั้งหมดเท่านั้น



โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.