如何在 Neo4j ruby 中的两个 ActiveNode 之间获取所有 ActiveRel



假设我们有

  • 节点: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返回一个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")

可以绕过这个:

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`

相关内容

  • 没有找到相关文章

最新更新