-
Notifications
You must be signed in to change notification settings - Fork 274
Search and Match
There are a few ways to find and return nodes.
find
returns one ruby object or nil if none was found.
# Example, find by id (neo_id or defined by id_property)
Blog.find(4242)
find_by
and find_by!
behave as they do in ActiveRecord, returning the first object matching the criteria or either nil or an error in the case of find_by!
Blog.find_by(title: 'Neo4j.rb is awesome')
All of the following result in enumerable results:
# Find all blog models
Blog.all
# Limit results
Blog.where(title: 'neo4j')
# Order
Person.where(age: 30).order(age: :desc).limit(5)
Use the params
method to perform more detailed searches.
Student.where(age: '{age}', name: '{name}', home_town: '{home_town}').params(age: params[:age], name: params[:name], home_town: params[:home_town]).first
Student.query_as(:s).where("s.age < {age} AND s.name = {name} AND s.home_town = {home_town}").params(age: params[:age], name: params[:name], home_town: params[:home_town]).pluck(:s)
When using quotes within a where
clause, you can use full cypher syntax. See http://docs.neo4j.org/chunked/stable/query-syntax.html.
The ActiveNode.query_as and ActiveNode#query_as methods return Query objects which allow you to chain together query clauses and then determine how you'd like the results to be returned.
# Find all comments for any blog which have the world "pottery"
result = Blog.query_as(:blog).match("blog<-[:COMMENTS_ON]-(comment:Comment)").where(comment: {body: /pottery/}).pluck(:blog, :comment)
result.first.blog # First blog
result.first.comment # Comment
# Find all comment authors whose age is greater than 30
blog.query_as(:blog).match("blog<-[:COMMENTS_ON]-(:Comment)<-[:AUTHORED]-(author:Person)").where("author.age > 30").pluck(:author)
# You can even get start with basic query methods and then transfer to detailed querying
blog.where(title: 'neo4j').query_as(:blog).match("blog<--(comment:Comment)").where("comment.created_at >= '2014-07-09'").pluck(:comment)
For more information on Query objects, see the Neo4j::Core::Query documentation (LINK TO YARD DOCS NEEDED)
You can also use the orm_adapter API, by calling #to_adapter on your class. See the API, https://github.com/ianwhite/orm_adapter
Same as in neo4j-core, see Neo4j::Session.query
WARNING: Much of the information in this wiki is out of date. We are in the process of moving things to readthedocs
- Project Introduction
- Neo4j::ActiveNode
- Neo4j::ActiveRel
- Search and Scope
- Validation, Uniqueness, and Case Sensitivity
- Indexing VS Legacy Indexing
- Optimized Methods
- Inheritance
- Core: Nodes & Rels
- Introduction
- Persistence
- Find : Lucene
- Relationships
- Third Party Gems & extensions
- Scaffolding & Generators
- HA Cluster