【发布时间】:2019-08-21 15:13:45
【问题描述】:
我有一个带有标签MyVertex 的顶点,它具有以下属性
{
text: "hello world",
indicator: {
code: [
{
unit: "thing",
val: "123"
},
{
unit: "other",
val: "456"
}
],
text: "test"
}
}
如何在code数组中找到所有具有特定val的顶点?
我正在使用 gremlin 节点。
我尝试过以下查询,但无济于事。
g.V()
.hasLabel('MyVertex')
.properties('indicator')
.unfold()
.has('val', '123')
.toList()
要在 gremlin-node 中创建此图,我运行以下命令
const data = {
text: 'hello world',
indicator: {
code: [
{
unit: 'thing',
val: '123',
},
{
unit: 'other',
val: '456',
},
],
text: 'test',
},
};
const v = g.addV('MyVertex');
for (const [key, val] of Object.entries(data)) {
v.property(key, val);
}
v.next();
【问题讨论】:
-
你能提供一个脚本来创建一个小示例图吗?
-
当然!我编辑了原始帖子。
-
我不认为你可以这样看待“val”值,据我所知,gremlin 只支持 1 级元属性。所以保存在“指标”内的所有对象都不会保存为顶点属性,因此您不能通过它们进行过滤。我认为您应该考虑将数据分成几个连接的顶点。也不是所有的图形数据库都支持元属性(如 Neptune)。
-
@noam621 感谢您的回复。在这种情况下,元属性是什么?我相信您可以将复杂的对象保存为顶点属性。至少我能够保存这个结构并再次查询它并检查地图
indicator和code的子地图。 -
可以获得二级和三级属性。但它们没有被索引。所以我认为你不能对它们做任何小鬼步骤。