我有一个拥有多个索引的集合,而且我经常需要将一些数据推送到该集合的数组中。我试图通过MongoDb Doc,但我能得到的最好的是,
对于未索引字段的插入和更新,稀疏索引的开销小于非稀疏索引的开销。此外,对于非稀疏索引,不更改记录大小的更新具有较少的索引开销。
我知道稀疏索引和非稀疏索引的区别,稀疏索引的开销会更少。
但是为什么即使我只更新文档中的非索引字段,为什么所有其他索引都必须更新!是因为每个索引都有相同的数据,所有数据都必须更新吗?
我的文件
var sample = new Schema({
***
student_list: [ {type :Schema.Types.Mixed}],
location: [ {type :Schema.Types.Mixed}],
****
});
student_list.studID will be indexed
{studID:1,city:M,Time:"... e}
现在我经常需要更新位置字段。查询
db.sample.find({student_list.studID:"studid"})
db.sample.find({student_list.studID:"studid", student_list.city:"M"})
all using student_list_studId_1 index
这种方法是否正常,或者我应该创建一个差异集合,并将每个学生列表作为单独的文档,(每个示例文档都有多个学生ID,这可能在diff示例文档中很常见)
答案 0 :(得分:0)
为每个插入更新索引的原因与文档大小及其分配有关。
假设文档有1765个字节,我们正在添加下一个950字节(数据+ bson开销),它可以执行给定文档的重定位,因为它不适合当前分配的数据块 - >和db引擎需要更新所有索引中的指针以指向新的文档位置。