如何在另一个查询中使用 orientjs 查询的数组结果 - 数组不是 "array"

How to use array results from orientjs query in another query - array is not an "array"

我想使用来自查询的类似数组的结果,但遇到了问题。 我有:

class case extends V
class doc extends V
class filedIn extends E

因此,文档通过 class filedIn 的边缘在 class 中归档。

我的第一个查询提取了一组顶点:

.select().from('case').one().then(function(result){...

然后我想 select 所有 filedIn 边链接到这些 case 顶点中的任何一个,但是如何?

JSON.stringify(result)

{"@type":"d","@class":"matter","title":"my case","in_filedIn":["#17:7","#17:8","#17:9"],"@rid":"#12:3","@version":12}

看起来result['in_filedIn']是一个数组,

但是

.select().from(result['in_filedIn']).all()

从数据库返回给我这个错误:

Error on parsing command at position #0: Error parsing query: \nSELECT * FROM [object Object]\nEncountered \

select().from('[#17:7,#17:8,#17:9]')

(硬编码)有效。

.select.from("[" + ["#17:1","#17:2].join(',') + "]").all()

也有效。

但是

select.from("[" + result['in_filedIn'].join(,)+"]").all()

抛出

result.in_filedIn.join is not a function

即无论它是什么类型的对象,它都不是从 Array 原型继承的。

console.log(result['in_filedIn'])

产生:

Bag { serialized: >'AQAAAAUAEQAAAAAAAAAHABEAAAAAAAAACAARAAAAAAAAAAkAEQAAAAAAAAAKABEAAAAAAAAADwAAAAA>AAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', uuid: null, _content: [ { [String: '#17:7'] cluster: 17, position: 7 }, ...

所以我很困惑该怎么办。

我想select所有@rid在result.in_filedIn

中列出的边

还是我误会了什么?

嗨,奥利弗 in_filedIn 不是数组,是 Orientjs 中称为 RidBag 的结构,实现是在 Bag.js 中完成的。 如果你想得到你应该做的数组

result['in_filedIn'].all()

获取数组。

下面的方法有效,虽然有点脏。

.from(JSON.stringify(result['in_filedIn']).replace(/"/g,""))

我还在寻找更好的答案!

其实我也遇到过类似的问题。当你实例化你的数据库连接时,有一个他们没有在他们的文档中列出的配置字段,叫做 enableRIDBags。 所以你的配置看起来像: { host: 'localhost', port: 2424, username: 'blah', password: 'blooh', enableRIDBags: false } 我发现最好只禁用 RIDBags,因为它们在节点中有点挑剔。上面列出的 .all() 技巧对我来说效果很好,直到我的顶点有超过 40 条边,因为那时它们都被转换为 SBTree 包而不是嵌入式包。如果您检查第 122 行 here,您会发现当您调用 .all()

时,它们无法将树转换为 JSON