1

アランゴッド 2.8b3

いくつかのプロパティ「仕様」を含むドキュメントがあり、内部に 1 ~ 100 個のキーを含めることができます。

document {
  ...
  specification: {
      key1: "value",
      ...
      key10: "value"
  }
}

specification.key によるタスク高速クエリ

For Doc IN MyCollection FILTER Doc.specification['key1'] == "value" RETURN Doc

フィールドでハッシュインデックスを作成しようとしました:「仕様」、「仕様。*」、仕様[*]、仕様[*]。*

インデックスは一度も使用されていません。構造や将来の計画を再編成せずに解決策はありますか?

4

1 に答える 1

2

いいえ、現在のところ、そのような構造のインデックスを処理する賢いアイデアはありません。索引付けされた各値の索引に属性名も存在する必要があるため、メモリー使用量も増加します。

2.8 でリリースするのは、配列構造でインデックスを使用する機能です。

db.posts.ensureIndex({ type: "hash", fields: [ "tags[*]" ] });

次のようなドキュメントで:

{ tags: [ "foobar", "bar", "anotherTag" ] }

次のような AQL クエリを使用します。

FOR doc IN posts
  FILTER 'foobar' IN doc.tags[*]
  RETURN doc

配列の下にドキュメントをインデックス付けすることもできます。

db.posts.ensureIndex({ type: "hash", fields: [ "tags[*].value" ] });
db.posts.insert({
  tags: [ { key: "key1", value: "foobar"},
          { key: "key2", value: "baz" },
          { key: "key3", value: "quux" }
        ] });

次のクエリは、配列インデックスを使用します。

FOR doc IN posts
  FILTER 'foobar' IN doc.tags[*].value
  RETURN doc

ただし、アスタリスクは配列アクセスにのみ使用できます。オブジェクト内のキーの一致を置き換えることはできません。

于 2016-01-11T10:55:04.573 に答える