【发布时间】:2015-02-10 22:11:51
【问题描述】:
我是 Mongo Node.js 驱动程序的新手。我的问题是,我在 Mongo 中设置了一个时间戳(以毫秒为单位)字段,现在我尝试按秒对其进行分组。时间戳是一个数字(Int64),我想将它分组并除以 1000 进行计数。
我的 MongoDB Shell 查询工作正常:
db.default.group(
{
keyf: function(doc) {
var secs = (doc.timestamp/1000).toFixed();
return {'data':secs};
},
cond: {source:1},
initial: {count:0},
reduce: function(obj, prev) {prev.count++;}
})
我的问题是我无法处理我的 Node.js 查询:
var keyf = function(doc) {
var secs = (doc.timestamp/1000).toFixed();
return {'data': secs};
};
collection.group(keyf, {}, {"count":0},
"function(obj, prev){prev.count++;}", false, function(err,results) {
console.log(results);
});
看起来好像 group 从来没有注意到 keyf 函数。有什么想法吗?
【问题讨论】:
-
您是否尝试过为此使用聚合框架?它比服务器端的 javascript 方法更快。问题是我认为很难在聚合框架中实现 truncation-by-division-by-1000 逻辑。你能解释一下这个要求是从哪里来的吗?您有一个以毫秒为单位的时间,并且您想按秒对文档进行分组?
-
是的,没错。我想按秒分组,而我只有几毫秒。要求是我想测量性能,并且我必须以 milis 为单位计算它,以便在不同的计算中精确。另一方面,我希望有几秒钟的时间可以将其放入带有数字的图表(绘图)中。在服务器中聚合它,就是做 DB 的用途。另一个解决方案(我在网上找不到)是将查询发送到数据库并将结果返回给服务器。在 node.js 中。
-
如果您的时间戳是日期类型而不是数字,它将在聚合框架中工作。我总是建议使用日期类型作为时间值。可以换吗?
-
我不确定。我必须在 Java 应用程序中做时间戳,这将它全部放入 mongo。我不能直接在数据库上制作时间戳。我不知道是否可以在运行的 Java 程序中执行这样的 mongo 时间戳。很公平,那么问题就很简单了,我承认。
标签: javascript node.js mongodb