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 [*]。*
指数从未使用过,没有重组结构或未来计划的任何解决方案都存在?
答案 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
但是,星号只能用于数组访问 - 它不能替代对象中的键匹配。