我想在 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})