Dynamic 使用动态键值向mongodb集合哈希字段添加索引

Dynamic 使用动态键值向mongodb集合哈希字段添加索引,dynamic,hash,indexing,mongoid,ruby-on-rails-4,Dynamic,Hash,Indexing,Mongoid,Ruby On Rails 4,我正在使用mongoid和rails 4。我有一个模型,它有一个hash类型的“data”字段。该字段将存储动态键值对。我知道我们可以为静态字段添加索引,但是否可以为“数据”的键添加索引,以及应该如何做 如果索引不在动态字段中,您可以按照相同的方式添加, 大概是这样的: class Person field :data, type: Hash index('data.foo' => 1) end 我非常确定Mongoid不会验证字段是否存在,因此您可以在模型上创建任何索引。另外,

我正在使用mongoid和rails 4。我有一个模型,它有一个hash类型的“data”字段。该字段将存储动态键值对。我知道我们可以为静态字段添加索引,但是否可以为“数据”的键添加索引,以及应该如何做

如果索引不在动态字段中,您可以按照相同的方式添加, 大概是这样的:

class Person
  field :data, type: Hash
  index('data.foo' => 1)
end

我非常确定Mongoid不会验证字段是否存在,因此您可以在模型上创建任何索引。另外,如果您没有包含该字段的所有文档,我也会在索引中添加
sparse
选项,这样可以在内存中节省一些空间。

在运行时,我怎么知道其中一个键是“foo”。100个不同的用户可能会发送100个不同的键值对。我明白了,所以如果你不知道键值,你将无法创建索引,这就是mongodb的设计工作原理。作为一个一般性的指导原则,使用常量键总是更好的。我几乎总是希望有一个哈希数组,而不是一个带有动态键的哈希字段。也就是说,
[{key:dynamic\u-key1,value:value1},{key:dynamic\u-key2,value:value2}]
{dynamic\u-key1:value1,dynamic\u-key2:value2}
更好,如果您需要索引并且想要有更多可维护的代码。