javascript - 如何在现有 Node 之间创建/匹配多个关系? (通过相同的参数)

标签 javascript node.js mongodb neo4j cypher

我在 StackOverflow 上看到过相关问题,但我猜这个是不同的。

实际问题是:如何在现有 Node 之间建立相乘关系?

我得到了这个代码:

session
    .run('MATCH(u:TEST { id: $id }) \n' +
        'MATCH(m:TEST { id: 39}) \n' +
        'CREATE(m)-[r:RELATIONSHIP {Quantity: $q}]->(u)\n', {id: 4, q: 4})
    .then(function (result) {
        result.records.forEach(function (record) {
            console.log(record);
        });
        session.close();
    })
    .catch(function (error) {
        console.log(error);
    });

它工作正常,但只创建一个关系。在这种情况下它停止工作: {id: [45, 65, 87], q: 4}

但是没有任何错误,关系没有创建。

我用这段代码解决了这个问题:

let x = [79, 43, 85];
for (let i = 0; i < x.length; i++)
session
        .run('MATCH(u:TEST { id: $id }), {id: x, q: 4})' +

下一个问题是:如何通过相同的参数匹配各个 Node id但不是 <id> ,例如:

id之间的区别和 <id>就是第一个,是made做的自定义字段,第二个是native Neo4j字段 (顺便说一下,正如你已经注意到我使用 node.js 所以我可以通过这个 Cypher 查询用我定制的 <id> 的值替换原生 id 字段: 'CREATE (a:TEST {id: $id, name: $name}) RETURN a'

let x = [79, 43, 85];
let y = [59, 77, 80];

for (let i = 0; i < x.length; i++)

session
  .run('MATCH(u:TEST { id: $id }) \n' +
    'MATCH(m:TEST { id: $id}) \n' + //I want to see array from y here
    'CREATE(m)-[r:RELATIONSHIP {Quantity: $q}]->(u)\n', {id: x, q: 4})

我可以使用 {id: x, id: y, q: 4} 吗? id两次,或 x & y就在 Cypher 查询中?还是应该重写?

最佳答案

我想你在找IN operator .

session.run('MATCH(u:TEST) WHERE u.id in $id \n' +
    'MATCH(m:TEST { id: 39}) \n' +
    'CREATE(m)-[r:RELATIONSHIP {Quantity: $q}]->(u)\n', {id: [45, 65, 87], q: 4})

此外,要访问 Neo4j 管理的内部 ID,您需要使用 id() .这样,您当前的查询与内部 ID 不匹配,因为您没有使用 id() 函数。


编辑:

在评论和其他答案中进行一些澄清后,符合所需行为的查询是:

match (n1:TEST) where n1.id in $ids1
match (n2:TEST) where n2.id in $ids2
with collect(distinct n1) as x, collect(distinct n2) as y, $qs, range(0,size($qs) - 1) as indexes
unwind indexes as index
with x[index] as start, qs[index] as quantity, y[index] as end
create (start)-[:SHIET {Quantity:quantity}]->(end)

考虑到所有数组都具有相同的大小(例如 {ids1: [79, 43, 85], ids2:y[59, 44, 36], qs: [3, 4, 4]})

关于javascript - 如何在现有 Node 之间创建/匹配多个关系? (通过相同的参数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49267037/

相关文章:

mongodb - 每个文档级别的聚合 mongodb

javascript - 在页面加载时弹出显示,然后在我一定时间后消失

javascript - 如何根据购物车总数显示消息

javascript - 异步模式下ajax回调冲突

javascript - GTM - 具有相同 ID 的多个按钮

javascript - 数组不会被填满

javascript - 从中间件通过 req.body 传递变量

node.js - 检查 MongoDB 的排队读/写

java - Mongodb 对象是否绑定(bind)到单个 Mongod 实例?

node.js - meteor 主机上的 meteor 部署错误