如何在 Neo4j ruby 中获取两个 ActiveNode 之间的所有 ActiveRel?
How can I get all ActiveRel between two ActiveNode in Neo4j ruby?
假设我们有
- 节点:
User
name
: 字符串
- 相对:
Transaction
amount
: 浮动
代表一个简化的类似比特币的交易,其中一个用户将硬币发送给其他用户。一笔交易有一个 属性 amount
,它显示了您从 from_node
.
向 to_node
发送了多少硬币
然后现在我想获取 Alice 和 Bob 之间的所有交易(单向或双向)。我该怎么做?
# user.rb
has_many :out, :receivers, rel_class: :Transaction
has_many :in, :senders, rel_class: :Transaction
# Console
alice = User.find_by(name: "Alice")
bob = User.find_by(name: "Bob")
# I want to do something like this:
Transaction.between(from: alice, to: bob)
# or this:
alice.receivers.rel_where(to_node: bob)
我很惊讶后者是不可接受的。它直接将 bob
包含到 CYPHER 中。
使用 Neo4jrb v8.0.0
我挣扎了很久才知道我可以做这样的事情:
alice.receivers.match_to(bob).pluck(:rel1)
有了这个我们可以得到从alice
发送到bob
的所有交易,但我认为在这里使用神奇的:rel1
不是一个好主意(这是可用的,因为它自动写入CYPHER,并且match_to
returns一个QueryProxy
对象:match_to
)
但是只得到 Rels 总是不被鼓励的。
相对来说,我们可以
alice.receivers.match_to(bob).rel_where(amount: 1.0) # Txs which amount are 1.0btc
和
alice.receivers.match_to(bob).each_rel.sum {|rel| rel.amount } # All the sent money!
‖
请注意,您不能这样做(以某种方式):
alice.receivers.match_to(bob).rel_where("rel1.amount < 10.0")
但是可以go-around用这个:
query = alice.receivers.match_to(bob) # create just the query
query.where("#{query.rel_var}.amount < 10.0") # you can get `:rel1` by `rel_var`
假设我们有
- 节点:
User
name
: 字符串
- 相对:
Transaction
amount
: 浮动
代表一个简化的类似比特币的交易,其中一个用户将硬币发送给其他用户。一笔交易有一个 属性 amount
,它显示了您从 from_node
.
to_node
发送了多少硬币
然后现在我想获取 Alice 和 Bob 之间的所有交易(单向或双向)。我该怎么做?
# user.rb
has_many :out, :receivers, rel_class: :Transaction
has_many :in, :senders, rel_class: :Transaction
# Console
alice = User.find_by(name: "Alice")
bob = User.find_by(name: "Bob")
# I want to do something like this:
Transaction.between(from: alice, to: bob)
# or this:
alice.receivers.rel_where(to_node: bob)
我很惊讶后者是不可接受的。它直接将 bob
包含到 CYPHER 中。
使用 Neo4jrb v8.0.0
我挣扎了很久才知道我可以做这样的事情:
alice.receivers.match_to(bob).pluck(:rel1)
有了这个我们可以得到从alice
发送到bob
的所有交易,但我认为在这里使用神奇的:rel1
不是一个好主意(这是可用的,因为它自动写入CYPHER,并且match_to
returns一个QueryProxy
对象:match_to
)
但是只得到 Rels 总是不被鼓励的。
相对来说,我们可以
alice.receivers.match_to(bob).rel_where(amount: 1.0) # Txs which amount are 1.0btc
和
alice.receivers.match_to(bob).each_rel.sum {|rel| rel.amount } # All the sent money!
‖
请注意,您不能这样做(以某种方式):
alice.receivers.match_to(bob).rel_where("rel1.amount < 10.0")
但是可以go-around用这个:
query = alice.receivers.match_to(bob) # create just the query
query.where("#{query.rel_var}.amount < 10.0") # you can get `:rel1` by `rel_var`