Свойства массового обновления Neo4j Cypher Relationships - PullRequest
2 голосов
/ 18 апреля 2019

Я надеюсь, что кто-то может помочь мне выяснить, почему это массовое обновление свойств отношений не работает из данного набора данных. Значение id в наборе данных - это neo4j ID отношения. tq, rpc и weight являются его свойствами.

var batchUpdate = [{"id":281,"tq":8,"rpc":2.4,"weight":84},{"id":283,"tq":5,"rpc":1.25,"weight":10},
{"id":286,"tq":4,"rpc":3.2,"weight":5}];

var nQuery = WITH {batchUpdate} AS stats UNWIND stats AS s MATCH ()-[k:BELONGS_TO]-() WHERE id(k)=s.id SET k.weight=s.weight, k.rpc=s.rpc, k.tq=s.tq;

session
.run(nQuery,{batchUpdate:batchUpdate})
.then(function (result) {
console.log('updated');
})
.catch(function (error) {
console.log('neo4j stats update error ' + error);
});

Я не получаю ошибок, он попадает в функцию успеха, но свойства фактически не обновляются.

1 Ответ

1 голос
/ 18 апреля 2019

При использовании официального драйвера Javascript neo4j вы должны использовать функцию neo4j.int () для переноса целочисленного значения, передаваемого через параметр, чтобы обойти тот факт, что Javascript не поддерживает 64- битовые целые числа (тогда как это то, что использует neo4j). По умолчанию драйвер Javascript преобразует целые числа в параметрах в числа с плавающей точкой.

Число с плавающей запятой не будет считаться эквивалентным целому числу.

Попробуйте изменить свой массив, например так:

var neo4j = require('neo4j-driver').v1;

...

var batchUpdate = [
  {"id":neo4j.int(281),"tq":neo4j.int(8),"rpc":2.4, "weight":neo4j.int(84)},
  {"id":neo4j.int(283),"tq":neo4j.int(5),"rpc":1.25,"weight":neo4j.int(10)},
  {"id":neo4j.int(286),"tq":neo4j.int(4),"rpc":3.2, "weight":neo4j.int(5)}
];
...