我正在尝试使用 Neo4j::Rails::Models 对 Neo4j.rb 做一个简单的测试,即标记单个事物,然后执行查询以使用该标记再次找到该事物。
所以数据本质上是这样的,只有一个标签和一个东西:
(标签)-标签->(事物)
当我使用我的脚本运行查询时,我没有得到任何结果,但如果我使用 neo4j 附带的 webadmin 控制台运行等效查询,我会得到执行结果。
我只是不知道我做错了什么,但我认为这一定是我使用 Neo4j.query 块的方式。
这是我从控制台运行的,它给出了正确的结果。
neo4j-sh (0)$ START tag=node:Tag_exact(text='tag') MATCH tag-[:tags]->thing RETURN thing;
==> +------------------------------------------+
==> | thing |
==> +------------------------------------------+
==> | Node[1]{name:"thing",_classname:"Thing"} |
==> +------------------------------------------+
==> 1 row
==> 197 ms
==>
neo4j-sh (0)$
这是提供等效密码查询但不返回任何结果的测试脚本。
require 'rubygems'
require 'neo4j'
require 'fileutils'
# Create a new database each time
Neo4j::Config[:storage_path] = "test_neo"
FileUtils.rm_rf(Neo4j::Config[:storage_path])
# Models
class Tag < Neo4j::Rails::Model
property :text, :index => :exact
end
class Thing < Neo4j::Rails::Model
property :name
end
# Data
thing = Thing.new(:name => "thing")
thing.save
tag = Tag.new(:text => "tag")
tag.outgoing(:tags) << thing
tag.save
# Query
puts Neo4j::Cypher.query {
lookup("Tag_exact", "text", "tag").outgoing(:tags).as(:thing)
}.to_s # START v1=node:Tag_exact(text="tag") MATCH (v1)-[:`tags`]->(thing) RETURN thing
results = Neo4j.query do
lookup("Tag_exact", "text", "tag").outgoing(:tags).as(:thing)
end
results.each do |result|
p result["thing"]
end # nil, I want to get the name of thing back here