我在MongoDB中有一个集合,其中文档属性“items”包含一组唯一的字符串。它可以建模为字符串数组:
{
_id : <Integer>
items : [ <String>, <String>, ... ]
}
或作为字典,每个字符串作为键,布尔值设置为true:
{
_id : <Integer>
items : { <String> : true, <String> : true, ... }
}
我的两个顾虑是: 我想在项目中添加和删除字符串。我想进行查找,例如某些字符串在项目中的所有文档。什么是更好的解决方案?
我相信字典会更快,因为查找将是不变的。而对于数组,它必须在最坏的情况下运行整个数组。
但是,我对文件增长感到担忧(http://docs.mongodb.org/manual/core/data-model-operations/#data-model-document-growth)。特别是,我不确定“在文档中添加新字段”是指在这种情况下。
由于许多不同的关键字段,字典会比数组增长得快吗?
考虑一个包含两个文档的集合:
as array:
{ _id : 1, items : [a, b] }
{ _id : 2, items : [c, d] }
或作为字典:
{ _id : 1, items : { a : true, b : true } }
{ _id : 2, items : { c : true, d : true } }
字典是否会更多地影响文档大小(当然,除了额外的布尔值),因为我们在集合中有4个新键(a,b和c,d)?