Neo4j 1.8'deki tüm düğümleri ve ilişkileri sil


92

Bu sorunun
araştırmam için zaten birçok kişi tarafından sorulduğunu biliyorum , işte daha önce sorulan bazı sorular

  1. Neo4j grafiğindeki tüm ilişkiler nasıl silinir?
  2. https://groups.google.com/forum/#!topic/neo4j/lgIaESPgUgE

Ne de olsa sorunlarımızı hala çözemiyoruz,
sadece "TÜM" düğümleri ve "TÜM" ilişkilerini silmek istiyoruz

görüntü açıklamasını buraya girin

varsayalım ki "TÜMÜ" nü sil, 0 düğümün kaldığını görebilir, 0 özellik ve 0 ilişki

Bu, forum tarafından önerilen "TÜMÜNÜ" silme işlemini gerçekleştirdikten sonra aldığım ekran görüntüsü

Sorum hala aynı, neo4j'deki tüm düğümler ve tüm ilişkiler nasıl silinir?

Yanıtlar:


248

2.3.0'dan itibaren ve 3.3.0'a kadar

MATCH (n)
DETACH DELETE n

Dokümanlar

2.3.0 öncesi

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

Dokümanlar


2
Neo4j dokümanlarındaki bu örnek şöyle diyor: "Bu sorgu büyük miktarda veriyi silmek için değildir, ancak küçük örnek veri kümeleriyle uğraşırken iyidir." MAÇ () - [r] - () SİL ve sonra MAÇ (n) SİL n
George Birbilis 18'15

2
@GeorgeBirbilis, bunu büyük miktarda veri üzerinden yapabilmek için işlemin birden fazla işlem üzerinden bölünmesi ve yeniden deneme mekanizmalarının uygulanması gerekir.
Bob B

1
yeniden denemenin gerekli olup olmadığından emin değilim, ancak yinelemeli bir yol için, stackoverflow.com/questions/29711757/… adresinde Stefan Armbruster'ın yanıtına bakın (Ayrıca, ayrı yanıtta sahip olduğum blog yazısı bağlantımın sonunda bundan bahsediyorum)
George Birbilis

2.3 cevap sorgusu benim için çalışmıyor. @GeorgeBirbilis öneri yapar.
aliteralmind

@aliteralmind bakarsak neo4j.com/docs/2.3.0/query-delete.html muhtemelen konuyla olduğuna dair bir satır gerekli ya da en azından bir boşluk karakter, şu anda yazıyor beri ...) DETACH hangi görünüyor bir benzerine) sonra yazım hatası (ve ayrıca DETACH DELETE'i aynı satırda tutmak için olabilir, ancak bunun gerekli olup olmadığından emin olamazsınız). Makalede yine de "Bu sorgu büyük miktarda veriyi silmek için değildir, ancak küçük örnek veri kümeleriyle uğraşırken iyi olur" dediğini unutmayın.
George Birbilis

6

Muhtemelen doğru yapıyorsunuz, sadece kontrol paneli sadece alınan daha yüksek ID'yi ve dolayısıyla "aktif" düğümlerin sayısını, ilişkileri, hiçbiri olmamasına rağmen gösterir. sadece bilgilendirici.

boş bir grafiğiniz olduğundan emin olmak için şu komutu çalıştırın:

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

ikiniz de size 0 verirse, silme işleminiz başarılı olmuştur.


evet, bu doğru ama gösterge paneli ne daha yüksek ne de en yüksek kimlik göstermiyor
Huei Tan

evet, bu şekilde programladılar - çünkü bilyon düğümlü bir kümeniz olduğunda, onları manuel olarak saymak istemezsiniz. ama bir yerde birinin bu konuya daha derinden girdiğini ve bir tür javascript düzeltmesi yaptığını gördüm, belki de şanslı olursanız, yazıyı google'da ararsınız.
ulkas

5

büyük bir veritabanı için ya veritabanını diskten kaldırmalısınız (sanırım motoru durdurduktan sonra) ya da Cypher'da aşağıdaki gibi bir şey kullanmalısınız:

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

Bu konuda çeşitli yanıtlardan edindiğim daha fazla bilgi için https://zoomicon.wordpress.com/2015/04/18/howto-delete-all-nodes-and-relationships-from-neo4j-graph-database/ adresine bakın


3

Neo4j, bir ilişkisi olan düğümleri silemez. Düğümleri silmeden önce ilişkileri silmeniz gerekir.

Ancak, "TÜM" düğümleri ve "TÜM" ilişkilerini basit bir chyper ile silmenin basit bir yoludur. Kod bu:

MATCH (n) DETACH DELETE n

-> DETACH DELETE, tüm düğümleri ve ilişkileri Eşleşmeye göre kaldırır


0

Düğümün adı örneğin: abcd ise aşağıdaki sorgu çalışacaktır:

MATCH (n:abcd)
DETACH DELETE n

Bu sadece "abcd" etiketli düğümü ve tüm ilişki gemilerini silecektir.



Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.