如何在另一个查询中使用 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
我想使用来自查询的类似数组的结果,但遇到了问题。 我有:
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()