Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j-按金额限制和按日期订购的退货_Neo4j_Cypher - Fatal编程技术网

Neo4j-按金额限制和按日期订购的退货

Neo4j-按金额限制和按日期订购的退货,neo4j,cypher,Neo4j,Cypher,背景: 我和约翰和彼得排队,他们都想买450个苹果(数量=r.Amount) (队列位置由r.Created给出(更早的日期=更早/更低的队列位置) 我有鲍勃和琳达,他们都想卖苹果(他们都有r.Amount) (两个都有1000个苹果) 此处的测试控制台: 场景: 第一个场景:售出400个苹果(无论是谁售出) 第二个场景:售出1100个苹果(无论是谁售出) 需要: 两种情况下仅1个密码查询,仅更改 变量400或1100 第一个场景需要:只有John返回,因为他可以购买所有400个苹果

背景

  • 我和约翰和彼得排队,他们都想买450个苹果(数量=r.Amount)
    (队列位置由r.Created给出(更早的日期=更早/更低的队列位置)

  • 我有鲍勃和琳达,他们都想卖苹果(他们都有r.Amount)
    (两个都有1000个苹果)

    此处的测试控制台:

场景:

  • 第一个场景:售出400个苹果(无论是谁售出)
  • 第二个场景:售出1100个苹果(无论是谁售出)
需要:

  • 两种情况下仅1个密码查询,仅更改 变量400或1100
  • 第一个场景需要:只有John返回,因为他可以购买所有400个苹果,并且因为他有第一个队列位置
  • 第二 场景需求:两个(John和Peter)都返回,因为它们都是 需要购买1100个苹果或部分苹果

我的想法是这样的,但不是用1来限制它,而是用400或1100加上所有r.宣布的总和(r.金额),但我认为这是不可能的:

MATCH (Pe:Person)-[a:announces]-(Pr:Product) 
RETURN Pe.name, a.Amount 
ORDER BY a.Created ASC
LIMIT 1;
我有一个示例来演示我的答案(它还原Bob和Linda节点,但它们与Apple节点有
销售
关系)。它还为买家的
个人
节点添加了
优先级
属性,以表示队列顺序

我的问题是:

MATCH (:Person)-[s:sells]-(pr:Product {name: 'Apples'})
WITH pr, SUM(s.Amount) AS nAvailable
MATCH (p:Person)-[a:announces]->(pr)
WITH nAvailable, {p: p, amt: a.Amount} AS pa
ORDER BY pa.p.priority
RETURN
  REDUCE(s = {unsold: nAvailable, res: []}, x IN COLLECT(pa) |
    CASE
      WHEN s.unsold = 0 THEN s
      WHEN x.amt <= s.unsold THEN {unsold: s.unsold-x.amt, res: s.res + {p: x.p, amt: x.amt}}
      ELSE {unsold: 0, res: s.res + {p: x.p, amt: s.unsold}}
    END
  ) AS result;
我有一个示例来演示我的答案(它还原Bob和Linda节点,但它们与Apple节点有
销售
关系)。它还为买家的
个人
节点添加了
优先级
属性,以表示队列顺序

我的问题是:

MATCH (:Person)-[s:sells]-(pr:Product {name: 'Apples'})
WITH pr, SUM(s.Amount) AS nAvailable
MATCH (p:Person)-[a:announces]->(pr)
WITH nAvailable, {p: p, amt: a.Amount} AS pa
ORDER BY pa.p.priority
RETURN
  REDUCE(s = {unsold: nAvailable, res: []}, x IN COLLECT(pa) |
    CASE
      WHEN s.unsold = 0 THEN s
      WHEN x.amt <= s.unsold THEN {unsold: s.unsold-x.amt, res: s.res + {p: x.p, amt: x.amt}}
      ELSE {unsold: 0, res: s.res + {p: x.p, amt: s.unsold}}
    END
  ) AS result;

如果John和Peter每人只想买450个苹果,那么1100个苹果怎么能卖出去?另外,如果Bob和Linda都有1000个苹果要卖,是什么阻止了900个苹果被卖出去?在什么情况下,只有400个会被卖出去?Cypher查询的可变变量是待卖苹果的数量。它可以是450个,1100个,或者像你说的900个(作为第三种情况)…问题的需要是返回所需数量的买家,前提是所有潜在买家只能购买部分/部分苹果。因此,在您的问题中,“x苹果出售”应该是“x苹果出售”?另外,在您的测试控制台中,Bob和Linda与苹果有
购买
关系——他们不应该有
出售
关系吗?我更新了测试控制台:并删除了Bob和Linda,因为这可能会带来混乱……回答您的问题:是的,x个苹果已经售出(无论谁出售)如果John和Peter每人只想买450个苹果,那么1100个苹果怎么能卖出去?另外,如果Bob和Linda都有1000个苹果要卖,是什么阻止了900个苹果被卖出去?在什么情况下,只有400个会被卖出去?Cypher查询的可变变量是待卖苹果的数量。它可以是450个,1100个,或者像你说的900个(作为第三种情况)…问题的需要是返回所需数量的买家,前提是所有潜在买家只能购买部分/部分苹果。因此,在您的问题中,“x苹果出售”应该是“x苹果出售”?另外,在您的测试控制台中,Bob和Linda与苹果有
购买
关系——他们不应该有
出售
关系吗?我更新了测试控制台:并删除了Bob和Linda,因为这可能会带来混乱……回答您的问题:是的,x个苹果已经售出(无论谁出售)感谢你的精彩回答,它回答了比最初的问题更多的问题…它需要解决一点,最后它帮助我们了解Cypher和Neo4j的可能性。感谢你的精彩回答,它回答了比最初的问题更多的问题…它需要解决一点,最后它帮助我们了解Cypher和Neo的可能性4j。