在MongoDB和Neo4J之间运行mongo-connector时出现语法错误

时间:2016-01-29 10:59:13

标签: python mongodb neo4j

我正在使用mongo-connector在MongoDB和Neo4J之间执行初始bulk_upsert操作。在使用py2neo查询时,某些时候发生InvalidSyntax异常,因为没有任何内容插入到图形数据库中。我认为问题出现在语法翻译期间的DocManager中。我正在运行py2neo v2.0.8Neo4J v2.3.1。 这是详细的堆栈跟踪:

Exception in thread Thread-2:
Traceback (most recent call last):
  File "//anaconda/lib/python2.7/threading.py", line 810, in __bootstrap_inner
    self.run()
  File "//anaconda/lib/python2.7/site-packages/mongo_connector/util.py", line 85, in wrapped
    func(*args, **kwargs)
  File "//anaconda/lib/python2.7/site-packages/mongo_connector/oplog_manager.py", line 256, in run
    docman.upsert(doc, ns, timestamp)
  File "//anaconda/lib/python2.7/site-packages/mongo_connector/doc_managers/neo4j_doc_manager.py", line 66, in upsert
    tx.commit()
  File "//anaconda/lib/python2.7/site-packages/py2neo/cypher/core.py", line 333, in commit
    return self.post(self.__commit or self.__begin_commit)
  File "//anaconda/lib/python2.7/site-packages/py2neo/cypher/core.py", line 288, in post
    raise self.error_class.hydrate(error)
InvalidSyntax: Invalid input '{': expected whitespace, comment or a label name (line 1, column 20 (offset: 19))
"MERGE (d:Document: { _id: {parameters}._id})"

这里可能会发生什么?

1 个答案:

答案 0 :(得分:1)

感谢您报告此事。

Neo4j Doc Manager使用xxx_id的关键命名约定来标识关系,其中假定具有键xxx_id的属性的值是引用集合xxx中的文档的id 。该约定允许我们从文档数据模型定义关系。我假设这里的错误是由Neo4j Doc Manager将嵌套文档的_id字段视为关系引起的,但不检查空集合名称(因为密钥中的“_id”之前没有出现任何内容)。

这是一个错误,我们将为此添加一个检查,以避免Cypher语法错误。有兴趣的人可以在这里跟踪问题:https://github.com/neo4j-contrib/neo4j_doc_manager/issues/56