Mongodb 文档内或仅跨文档集合的mongodo索引

Mongodb 文档内或仅跨文档集合的mongodo索引,mongodb,Mongodb,我正在从流式API收集数据,我想创建一个实时分析仪表板。每次流末尾出现新记录时,我都会更新下面文档中的计数器 从设计的角度来看。我只使用一个文档是否正确,如下面的示例所示 { "_id" : ObjectId("5238beb4d4bed9e444c99978"), "counts" : { "hours" : { "1" : 835, "2" : 1007, .

我正在从流式API收集数据,我想创建一个实时分析仪表板。每次流末尾出现新记录时,我都会更新下面文档中的计数器

从设计的角度来看。我只使用一个文档是否正确,如下面的示例所示

{
    "_id" : ObjectId("5238beb4d4bed9e444c99978"),
    "counts" : {
        "hours" : {
            "1" : 835,
            "2" : 1007,
            .
                    .
                    .
                    "3" : 174,
         }
}
这种方法的好处是只需将一个文档发送到实时分析仪表板。同样,一年后,该文档将只有365*24个字段,该年每小时1个

索引呢?如果我只有一个文档,我可以创建counts.hours索引吗?或者索引是否只在mongodb中跨集合工作?索引是否有助于更快地查找文档或文档中的字段


如果我可以在counts.hours上创建索引,那么计数器递增过程可以更有效地找到正确的递增小时数(流末尾的每个新文档)。

您可以在文档中嵌入的字段中创建索引。在上述情况下:

yourCollection.ensureIndex({ 'counts.hours':1 });
该索引将帮助您优化查询,以便根据“counts.hours”字段返回文档

youCollection.find({ 'count.hours':1 });
您的数据结构设计应该取决于您计划执行的查询和更新的类型。在您描述的情况下,我想您将向“hours”对象添加成员,这样的更新可能会很昂贵,因为MongoDB会对每个集合记录进行优化,以便在更新过程中记录大小保持稳定