1

阿兰戈德 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[*].*

从未使用过索引,是否存在无需重组结构或未来计划的解决方案?

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 回答