node.js - 如何将 mongo 对象推入 Neo4j
问题描述
我正在编写一个代码,我需要先将数据推送到 mongo 中,然后在成功插入该数据后,我想将其推送到 neo4j 中。mongo 框架中的数据无法推送到 Neo4j 中。它抛出以下错误:
{ Neo4jError: Cannot pack this value: function() {
var numArgs = arguments.length,
states = utils.args(arguments, 0, numArgs - 1),
callback = arguments[numArgs - 1];
if (!states.length) states = this.stateNames;
var _this = this;
var paths = states.reduce(function(paths, state) {
return paths.concat(Object.keys(_this.states[state]));
}, []);
return paths[iterMethod](function(path, i, paths) {
return callback(path, i, paths);
});
}
我没有在数据中添加函数作为值,除非它是 mongo 对象的默认属性。
我正在用 NodeJS 编写代码,并为 Nodejs 使用 mongoose 和 Neo4j 驱动程序。
我尝试使用下面提到的测试数据。测试数据的主要值与 mongo 插入对象相同,并且工作正常。但是当数据是真正的 mongo 插入结果时,它就不起作用了。
{
"ruid": "123kl2",
"puid": "lkajsdlk2",
"chiefComplaint": "a chief complaint",
"diagnosis": "a diagnosis",
"subRecords": [],
"creationDate": [],
"refForm": "someone"
}
我在下面的代码中插入 mongo 中的文档,并将结果提供给负责将该数据推送到 Neo 的函数。
var newRecord = new Record();
newRecord.chiefComplaint = req.body.data;
newRecord.puid = numberFromBefore;
newRecord.save((err, monDoc) => {
if (err) throw err;
neo.recordPush(monDoc, (error, neoRes)=>{
if (error) throw error;
else{
res.status(200).send({
ret: true,
id: monDoc._id
});
}
});
});
在 neo 函数中,recordPush 函数如下:
exports.recordPush = function (mainObject, callback) {
session.run(
"WITH $main_object_ as mainObject " +
"MATCH (p:Patient {puid: mainObject.puid }) " +
"CREATE (rec:Record {ruid: mainObject.ruid}) " +
"CREATE (p)-[r:Suffer]->(rec)",
{
main_object_: mainObject,
}
).then(function (result) {
console.log('saved for ' + mainObject.puid);
callback(null, result);
}).catch((err) => {
callback(err, null);
});
}
解决方案
您可以尝试通过 Neo4j 文档管理器https://neo4j.com/developer/mongodb/将 mongo 对象插入 Neo4j,或者您可以使用 APOC 库与 MongoDB https://neo4j.com/docs/labs/apoc/current交互/数据库集成/mongodb/
推荐阅读
- javascript - 如何在正确刷新页面期间重新获取 GraphQL 查询?
- elixir - Elixir:将混合项目配置为始终将字符列表打印为列表?
- javascript - addClass 和 cookie 支持
- git - 在 ActiveDirectory Windows 机器上建立 SSH 连接
- javascript - (深?)在 JavaScript 中复制地图
- python - 如何在 Tkinter 中调整按钮的大小?
- javascript - 我需要从每个帖子中删除重复的评论
- c# - 如何将 xaml 网格保存为 pdf?
- php - PDF Laravel snappy:文本损坏
- azure-devops - 如何在 Azure DevOps 2020 中手动更新构建代理?