我的Mongodb系列具有以下文档结构:
{
_id: 1,
my_dict: {
my_key: [
{id: x, other_fields: other_values},
...
]
},
...
},
我需要经常更新数组子文档,因此id
字段上的索引似乎是个好主意。不过,我有很多文件(数百万),但我的内部数组很小(最多20个元素)。与索引成本相比,它还能为索引提高性能吗?
PS:我没有使用id
作为键(dict而不是数组),因为我还经常需要获取“数组”中的元素数量(仅$size
适用于数组)。我使用Mongodb 3.2时无法使用count
。
后续问题:如果它会产生很大的不同,我可以改为使用这样的字典:
{id: {others_fields: other_values}}
并将自己的大小存储在一个字段中。我不喜欢这个是我需要另一个字段并自己更新(可能是错误,因为我每次添加/删除项目时都需要使用$inc
而不是依赖于“真实”值。我还必须管理一个密钥可能被调用_my_size
的可能性,这会与我的逻辑冲突。它看起来像这样:
{
_id: 1,
my_dict: {
my_key: {
id: {other_fields: other_values},
_my_size: 1
},
},
},
仍然不确定哪个最适合表现。我将需要更新子文档(使用id
字段),以及计算$size
很多(可能是更新的1/10)。
哪种架构/策略会给我带来更好的表现?或者更重要的是,它实际上会产生很大的影响吗? (每秒可能有数千个电话)
更新示例:
update(
{_id: 1, my_dict.my_key.id: update_data_id},
{$set: {my_dict.my_key: update_data}}
)
获取大小示例:
aggregate(
{$match: {_id: 1}},
{$project: {_id: 0, nb_of_sub_documents: {$size: $my_dict.my_key}}}