【发布时间】:2014-07-25 23:21:23
【问题描述】:
考虑 MongoDB 中代表调查响应的文档集合,其结构与此类似:
{
_id: ...
surveryId: ...
created: ...
answers: {
"53ac9a031703670858aff600": "Yes",
"53b1e8961703670aa858e4ec": "18364537",
"53b1e8961703670aa858e4ee": "88422",
...
"53b1e8961703670aa858e50a": NumberLong(2)
}
}
答案子文档中的每个条目代表用户对调查中单个问题的回答,调查中可能有数百个问题。此外,调查问题由用户创建,因此答案子文档的键可能因文档而异(即另一个文档可能不包含“53ac9a031703670858aff600”)。问题本身存储在单独的调查集合中。
为了能够快速检索调查回复(即显示问题 A 被回答为“是”的所有调查回复),我尝试添加以下索引:
db.responses.ensureIndex({"answers": 1})
但是,在构建此索引时,我收到错误“Btree::insert: key too large to index”,表示索引条目的总大小超过 1024 字节。
我的问题有两个:
有没有办法批量索引答案子文档,以便我可以发出类似
db.responses.find({"answers.53ac9a031703670858aff600": "Yes"})的查询并且该查询命中索引?如果我无法创建涵盖整个答案子文档的索引,我有哪些选择可以确保可以使用索引检索任何调查答案?我应该考虑为回复设计新的文档吗?
访问此数据的应用程序是使用官方 MongoDB 驱动程序的 .NET 应用程序。
【问题讨论】:
标签: .net mongodb optimization indexing