如何在属性中创建索引,该属性是OrientDB中的对象列表?

时间:2015-01-13 08:31:49

标签: javascript node.js orientdb oriento

我想要一个存储结构的类:

{
  name: "blabla",
  metaData: [ {a: "mya"}, { a:"mya2"} ]  
}

`

现在,我希望在metaData [?]。 a 字段上有一个索引

  1. 在架构中表示此metaData的最佳方法是什么?作为embeddedList?
  2. 是否有可能拥有我想要的索引?
  3. 如果是这样,那么通过它的“a”值检索实体的查询应该是什么样的?
  4. 或者,如果我们有一个名为“myAs”的字段,而不是那个metaData 简单的字符串数组 - 会更容易吗?
  5. 请注意,我正在使用Node.JS oriento库。

1 个答案:

答案 0 :(得分:0)

我不知道您想要的索引是否可行,但如果您按照第4点的说法进行操作,则可以定义索引(我将其定义为唯一,但其他人将会工作)。

你可以:

create class Test
create property Test.name string
create property Test.metaData embeddedlist string

insert into Test set name = 'blabla', metaData = ['mya', 'mya2']

CREATE INDEX Test.metaData UNIQUE

insert into Test set metaData = ['mya', 'mya2'] # this will throw an exception

您在第3点询问的查询可能类似于:

select from Test where 'mya' in metaData

<强>更新

您还可以索引嵌入式地图。 (见here

create property Test.metaDataTwo embeddedmap string
create index myIndex on Test (metaDataTwo by value) unique

insert into Test set name = 'blabla', metaDataTwo = {'prop1':'value1', 'prop2':'value2'}
insert into Test set metaDataTwo = {'prop3':'value1'}  # this will throw an exception

使用此索引的查询应为:

select from Test where ( metaDataTwo containskey 'prop1' ) and (  metaDataTwo['prop1'] = 'value1' )