【发布时间】:2018-01-20 16:53:08
【问题描述】:
我有一个 mongodb,多个传感器每天将其数据转储一次以
一个MongoDB。本质上的每个文档是:{ sid , date, data }(sensor_id,date 作为日期(我只使用日期组件)和一个包含数百个值的 data 数组。
现在我希望能够获得概览统计数据,了解我每天有多少传感器数据。这种聚合效果很好,虽然我有几十个元素,但即使我有几百个文档,查询也永远不会完成。
function dailyStatistic(callback) {
return air
.aggregate( [
{ $match: {} },
{ $group: { _id: { date: '$date' }, myCount: { $sum: 1 } } }
])
.allowDiskUse(true);
}
air 是我的猫鼬收藏的名称。
聚合实际上应该只是返回:
[ {date:2017-08-07, myCount: 10}, {date:2017-08-08}, myCount: 26} ]
现在,当我(通过一瞥)观察机器时,我得到 CPU_IOWAIT 和 MEMSWAP 错误,这最终会在 node.js 进程获取数据之前杀死它。
当我在 robomongo 上查看收藏时,我可以轻松浏览 不同的数据点。但也在 robomongo 中,这个脚本永远不会让我 结果:
db.getCollection('air').find({}).length()
有什么想法吗? 谢谢安德烈亚斯
【问题讨论】:
-
你有日期索引吗? $match 也没用
-
我不认为这是索引问题。即使没有索引,Mongo 也可以很好地处理数百万个文档,但这需要更长的时间,但仍然如此。你的机器有多少内存?我建议看一下 mongo 配置,如果一切正常,请查看连接字符串。
-
我有 8 GB RAM。在 Mongodb 配置中没有什么异常;我在 mongodb 中找不到任何限制 RAM / 缓存消耗的选项。
-
我相信这与每个文档的大小有关。我将开始缩小文档的大小,直到它起作用,并进一步评论。
标签: node.js mongodb mongoose robo3t