如何在 mongodb 中存储和查询每日服务器使用情况数据



我想在 mongodb 中存储来自我们服务器的每日 CPU 和磁盘统计信息,并在以后查询它们进行分析,我需要有关如何存储和查询数据的帮助。

我尝试了以下结构,但在存储后无法查询特定日期/日期范围的数据。

    > 
    > db.customer2.find()
    { "_id" : ObjectId("5a677a69b427f6a736044894"), "server" : "s1", "cpuload" : { "2017-11-04T00:00:00Z" : 50,"2017-11-04T00:00:00Z" : 60 }, "disk_usage" : { "2017-11-04T00:00:00Z" : 90, "2017-11-05T00:00:00Z" : 90} }
    { "_id" : ObjectId("5a677a69b427f6a736044894"),  "server" : "s2", "cpuload" : { "2017-11-04T00:00:00Z" : 50,"2017-11-04T00:00:00Z" : 60 }, "disk_usage" : { "2017-11-04T00:00:00Z" : 90, "2017-11-05T00:00:00Z" : 90} }
    > 
    > db.stats2.find({"disk_usage":"2017-11-04T00:00:00Z"})
    >

将数据结构从键控名称值对更改为嵌入文档数组。

"disk_usage":[
       {"date":ISODate("2017-11-04T00:00:00Z"),"value":60}, 
       {"date":ISODate("2017-11-05T00:00:00Z"),"value":90}
]

您可以使用dot notation对日期字段应用条件,当"disk_usage"数组中有匹配的日期条目时,该字段将返回文档。

db.col.find({"disk_usage.date":ISODate("2017-11-04T00:00:00Z")}) 

您必须使用$投影来返回"disk_usage"中匹配的日期元素。

db.col.find({"disk_usage.date":ISODate("2017-11-04T00:00:00Z")}, {"disk_usage.$":1}) 

最新更新