我的Mongo表中有一个字段存储为Hash。
"values" : {
"4e64b7cb3e9b3a4d8a00000b" : "Page",
"4e77304b3e9b3a4ace000003" : "Michael",
"4e64b7cb3e9b3a4d8a00000c" : 6,
"4e64b7cb3e9b3a4d8a00000d" : 4,
"4e64b7cb3e9b3a4d8a00000e" : 2,
"4e64b7cb3e9b3a4d8a00000f" : 6,
"4e64b7cb3e9b3a4d8a000010" : 12
}
现在我需要获取values
存储数据等于Michael
的所有行
喜欢Ruby:
Table.all.select{|row| row.values.any?{|k,v| v == 'Michael' }}
答案 0 :(得分:1)
您可use multikeys to simulate a large number of indexes使这些键/值查询更有效率。但是,values
应该是一个数组,而不是具有未知模式的复杂对象,因为它排除了定义索引。
SomeCollection
{
values : [
{ "key" : "4e64b7cb3e9b3a4d8a00000b", "value" : "Page" },
{ "key" : "4e77304b3e9b3a4ace000003", "value" : "Michael" },
/* ... */
]
}
db.SomeCollection.ensureIndex("values");
db.foo.find( { values : {value: 'Michael'} } )
由于MongoDB使用数组的方式,这将找到values
中value
个{{1}}“迈克尔”中至少有一个元素的所有文档。但请注意,这将找到父文档,而不是键/值对本身。