首页 > 解决方案 > 如何将 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);
  });
}

标签: node.jsmongodbneo4j

解决方案



推荐阅读