0

次のような構造を格納するクラスが必要です。

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

`

ここで、metaData[?] にインデックスを付けたいと思います。フィールド

  1. このメタデータをスキーマで表現する最良の方法は何ですか? embeddedListとして?
  2. 私が望むそのインデックスを持つことは可能ですか?
  3. もしそうなら、その「a」値によってエンティティを取得するためのクエリはどのように見えるべきですか?
  4. あるいは、そのメタデータの代わりに、文字列の単純な配列である「myAs」というフィールドがあれば、簡単でしょうか?

Node.JS orientoライブラリを使用していることに注意してください。

4

1 に答える 1

0

ご希望のインデックスが可能かどうかはわかりませんが、ポイント 4 のようにすれば、インデックスを定義することが可能です (私はuniqueと定義しましたが、他でも機能します)。

あなたは出来る:

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

アップデート

また、embeddedmap をインデックス化することもできます。(こちらをご覧ください

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' )
于 2015-02-18T17:08:46.183 に答える