我正在使用mongo-connector
在MongoDB和Neo4J之间执行初始bulk_upsert
操作。在使用py2neo查询时,某些时候发生InvalidSyntax
异常,因为没有任何内容插入到图形数据库中。我认为问题出现在语法翻译期间的DocManager
中。我正在运行py2neo v2.0.8
和Neo4J 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})"
这里可能会发生什么?
答案 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