对象键上的Arangodb动态索引

时间:2016-01-08 21:18:28

标签: indexing arangodb aql

Arangodb 2.8b3

有一些属性“规范”的文件,里面可以有1-100个键,如

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

通过specification.key快速查询任务

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

尝试使用字段创建哈希索引:“specification”,“specification。*”,specification [*],specification [*]。*

指数从未使用过,没有重组结构或未来计划的任何解决方案都存在?

1 个答案:

答案 0 :(得分:2)

不,我们目前没有任何明智的想法如何处理这样的结构的索引。内存使用量也会增加,因为属性名称也必须存在于每个索引值的索引中。

我们将发布with 2.8 is the ability to use indices on array structures

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

但是,星号只能用于数组访问 - 它不能替代对象中的键匹配。

相关问题