2015-01-13 1 views
0

Я хотел бы класс, который хранит структуру, как это:Как создать индекс над свойством, являющимся списком объектов в OrientDB?

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

`

Теперь, я хотел бы иметь индекс по метаданным [?]. a полей.

  1. Каков наилучший способ представления этих метаданных в схеме? Как встроенный список?
  2. Возможно ли иметь этот индекс, который я хочу?
  3. Если да, то должен ли выглядеть запрос на получение объекта по его «значению»?
  4. В качестве альтернативы, если у нас вместо метаданных есть поле, называемое «myAs», то есть простой массив строк - было бы проще?

Обратите внимание, что я использую библиотеку Node.JS oriento.

ответ

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 

UPDATE

Вы можете также индексировать embeddedmap. (См 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') 
+0

Предполагая, что массив будет использоваться, да, это было бы запрос. Вопрос, который все еще открыт: будет ли он проиндексирован, что означает одну запись индекса на элемент массива (mongodb делает это). –

+0

Я думаю, что он индексирует весь список. – vitorenesduarte

+0

См., Что OrientDB не поддерживает индексирование в сложных структурах данных. См. [Этот вопрос] (https://github.com/orientechnologies/orientdb/issues/3101) – vitorenesduarte

 Смежные вопросы

  • Нет связанных вопросов^_^