neo4j : Is there any such command is neo4j like 'CREATE DATABASE' - neo4j

I want to create a new Database in neo4j using Cypher as I am not a Java (or Programming language) guy but a Database person ....Could I create a neo4j database using Cypher before creating nodes and relationships ...I am using ne04j community console and would like to create a new database
Thanks !

There is only one database.
You can clean out your current data by either stopping the server and removing the database on disk /path/to/neo4j/data/graph.db and starting it again.
Or by executing a Cypher statement like:
MATCH (n)
OPTIONAL MATCH (n)-[r]->()
DELETE n,r

You dont need to create a new database as(neo4j folder)\data\graph.db is the default path for the database.Neo4j is different from the relational databases.Folder it self is a database.In a graph database you have to create three things: nodes,relationships and properties.
If you want to change the database path you can change the path in conf/neo4j-server.properties.
You can also refer below link:
How to delete/create databases in Neo4j?

Related

Vote How to view Cypher queries back for a database

I have used Neo4J ETL tool and create a Neo4J database from Postgres SQL and this looks perfect. I can see all nodes, relationships, data, etc.
Now I want to see all the database file, the Cypher queries for all node and relationship creation along with different constraint applied to this database.
How can I view this? I can see database folder is empty for Neo4J home,
C:\Users\I\.Neo4jDesktop\relate-data\dbmss\dbms-9cf178b6-f37f-4139-8b80-dadf0fa03866\data\databases
2nd question, can I generates graphql schema from the Cypher script using any tool or some mean?
Thanks!
I think below codes can help you to get meta-data and schema
// Show meta-graph
CALL db.schema.visualization()
// List node labels
CALL db.labels()
// List relationship types
CALL db.relationshipTypes()

Clearing The whole database In Neo4j Enterprise edition

I'm using Neo4j Enterprise Edition. I want to clear the whole database I have created before . I mean Every single Node and it's relationships and also properties So I found this syntax on Neo4j book I ran the syntax :
MATCH (a)
OPTIONAL MATCH (a)-[r]-()
DELETE a, r
But still can see the properties on the property keys part
what's wrong?
What should I do so that even properties get deleted?
Neo4j Browser just show the data returned from CALL db.propertyKeys(). Currently the procedure db.propertyKeys() is returning unused properties, as you can see in this GitHub issue at Neo4j Repo.
That is: your database is totally empty, but Neo4j Browser still showing the properties that existed in your database at some point of time.
Since you are deleting all your nodes and relationships, you can alternatively delete all content of <neo4j-home>/data/databases/graph.db/ folder and restart Neo4j service. But you will need to recreate all indexes, constraints and do authentication again.
Tip: Currently you can use DETACH DELETE to delete a node and any relationship going to or from it. So instead of the query yo wrote you can use:
match (node)
detach delete node

Export Neo4j db creation statements

Such as the example movies database
Is it possible to extract the single statement that creates the current database with all it's properties, relations and nodes?
You can install APOC procedures and use apoc.export.cypher.all. From the docs:
apoc.export.cypher.all(file,config) - exports whole database incl.
indexes as cypher statements to the provided file

Neo4j Manual Index on Relationship Properties

I'm going to try in my application Neo4j Manual Index on Relationship Properties in order to fix the performance issue I faced Neo4j Cypher query performance optimization
I have a few question which is not clear to me from the official Neo4j documentation:
MATCH (:Flight)-[r:DESTINATION]->(:Airport)
CALL apoc.index.addRelationship(r,['taxi_time'])
RETURN count(*)
The statement will create the relationship index with the same name as
relationship-type, in this case DESTINATION and add the relationship
by its properties to the index.
When do I need to create this relationship index? It should be done once(let's say at the application startup) or do I need to invoke this APOC function each time new -[r:DESTINATION]-> relationship is added between Flight and Airport nodes?
In case of existing -[r:DESTINATION]-> relationship update, how to update this information in the appropriate manual index?
In case of deleting some of Flight or Airport node - do I need to manually find and remove appropriate -[r:DESTINATION]-> relationships from the manual index or it will be done automatically by APOC and Neo4j?
In case of Spring Data Neo4j project - how to properly execute queries that contain APOC functions? For example, I want to call apoc.index.addRelationship in order to create the manual index for the relationship properties. Can I use org.neo4j.ogm.session.Session.query for this purpose?
What the consistency model is used for the manual indexes - Do they use eventual consistency or strong consistency model between the index and the original data?
I agree Neo4J documentation on this issue is really insufficient.
To answer your questions:
1.If you upgraded your Neo4J from an older version that used automatic relationship index you would need to run APOC (only once) to index your existing relationships using something like
MATCH ()-[r]->() CALL apoc.index.addRelationship(r,['property_1','property_2']) RETURN count(*);
You would then need to set up a trigger to any new relationship you add to that index, running something like this once:
CALL apoc.trigger.add('RELATIONSHIP_INDEX',"UNWIND {createdRelationships} AS r MATCH ()-[r]->() CALL apoc.index.addRelationship(r,['property_1','property_2']) RETURN count(*)", {phase:'after'})
(you will need to activate apoc.trigger.enabled=true in neo4j.conf file before)
2.See above
3.You would need to remove them also from the index, it is not done automatically. Set up an APOC trigger with removeRelationshipByName() for that.
4.Should be possible.
5.Somebody from Neo4J should answer this.
Hope this helps and saves you some time!

Delete all relations and connected nodes in Neo4j for a user

We have selected neo4j as the DB for our web application. The user has a large number of relations and connected nodes. As of now there are about 20 relations for a user. One of the features is a newsfeed feature. If i want to delete a user completely, is the cypher query the best way to delete or is there any other alternative?
Since we are still planning to add new features, the relationships and nodes connected to the user also will increase. So if we use cypher query, the query has to be modified for every new relationship added. Please advise.
Thanks,
Pavan
Yes, you can use Cypher to remove a user. Of course, there are alternative methods, depending on the language or framework you're using with your web application. If you like to have advise on that, please specifiy how you're using Neo4j in detail.
Note that you have to remove all relationships (outgoing and incoming) first in order to be able to remove the node.
Example:
START n = node(3)
MATCH n-[r]-()
DELETE n, r
This example was taken from the official manual: http://docs.neo4j.org/chunked/milestone/query-delete.html
As of Neo4j 2.3 there is another way to do this:
MATCH (n { name:'Andres' })
DETACH DELETE n
I found this example in the documentation at: http://neo4j.com/docs/stable/query-delete.html
An alternative could be to write a gremlin script that traverses your graph starting with your user and is putting in two collection the relationships and the nodes that you intend to delete. If you want to delete everything, perhaps you can implement your depth first traversal in Gremlin and delete while traversing.

Resources