1

我正在尝试使用 orientjs(以前的 oriento)查询构建器插入一个顶点。我的班级有一个指向另一个班级的链接类型属性。

我知道我可以让它与原始查询字符串一起工作,但我很想使用查询生成器。

这是我迄今为止尝试过的:

db.insert()
.into('VertexClassName')
.set({"prop":"value", "linkProperty":"33:1289287"})

db.insert()
.into('VertexClassName')
.set({"prop":"value", "linkProperty":"#33:1289287"})

我收到以下错误:

Error on saving record in cluster #13

我是否以正确的方式设置属性?该错误可能与其他问题有关吗?我已经在工作室中使用原始查询字符串成功地在集群 #13 中运行了插入查询......

4

3 回答 3

0

根据官方文档,问题似乎出在您的声明的末尾

db.insert().into('VertexClassName')
    .set({"prop":"value", "linkProperty":"33:1289287"}).one()
    .then(function (data) {
       // callback
});

检查您的代码是否可以将 one() 添加到管道

已编辑:我在orientjs中找到了这种方法。

db.create('VERTEX', 'V')
.set({
  key: 'value',
  foo: 'bar'
})
.one()
.then(function (vertex) {
  console.log('created vertex', vertex);
});

当使用 Tinkerpop API 时,他们建议使用 createVertex 而不是 insert,因为 createVertex 是为图形设计的,而 insert 是为 Documents 设计的……你可以试试 create() 方法吗?

于 2015-07-28T12:56:54.167 回答
0

除非您在架构中添加了具有正确类型“链接”的正确字段,否则我认为这是不可能的。(我很少这样做)。

现在,您可以执行相反的操作,而不是插入正确的“链接”类型,将存储为字符串,并利用查询函数正确使用它:

db.insert().into('table').set({prop: '#15:14'}).one();

它将被转换为字符串(这有点难过),但是您可以在查询中使用它:

SELECT eval(prop) FROM table; 

它将被“评估”到一个节点 RecordID,您可以直接使用它并调用诸如 expand() 之类的函数。

例如:

SELECT name FROM (SELECT expand(eval(prop)) FROM table); 

将评估存储在 insert() 中的节点,抓取节点,展开它并收集其名称属性。

于 2017-01-08T06:42:10.657 回答
0

我正在使用 SQL 并且它有效。

sql = "INSERT INTO Station set linked = (select from LinkedClass where LinkedProb = 'value'), prop = 'value'"

OrientVertex vertex = new OrientVertex();
vertex = graph.command(new OCommandSQL(sql)).execute();
于 2016-01-16T11:43:42.100 回答