【发布时间】:2011-03-26 14:07:42
【问题描述】:
我正在尝试在 Node.js 中执行这个 MongoDB 命令:
db.events.group({
key: {
'timestamp.d': true
},
cond: {
'event_name': 'search'
},
initial: {
'count': 0,
'empty': 0,
'redos': 0
},
reduce: function(item, summaries) {
summaries.count++;
if (item.result_count == 0) {
summaries.empty++;
}
if (item.original_query) {
summaries.redos++;
}
var totalSuccesses = (summaries.count - summaries.redos - summaries.empty);
summaries.percentNonFailures = (totalSuccesses / summaries.count) * 100
}
})
这在 Mongo 命令中非常有用,就像每天给我总结一样。当我在 Node.js 中尝试这个时:
db.collection('events', function(err, collection) {
collection.group({
"timestamp.d": true
}, {
"event_name": "search"
}, {
count: 0,
empty: 0,
redos: 0,
percentNonFailure: 0,
}, function(item, summaries) {
summaries.count++;
if (item.result_count == 0) {
summaries.empty++;
}
if (item.original_query) {
summaries.redos++;
}
totalSuccesses = summaries.count - summaries.redos - summaries.empty
summaries.percentNonFailure = (totalSuccesses / summaries.count) * 100
}, function(err, results) {
self.eventEmitter.emit(doneEvent, results)
});
});
我得到一个结果,将每天的所有总数加在一起,所以基本上是整个期间的计数、空、重做的总和。
在尝试将查询转换为在 Node.js 中使用时做错了什么?
【问题讨论】:
-
我可能已经解决了这个问题,Node 运行查询的方式与命令行不同,所以分组不是按
timestamp的哈希元素d分组,而是按timestamp.d分组跨度> -
我可以改进一下——它本身不是 node.js,而是 node-mongodb-native 驱动程序(github.com/christkv/node-mongodb-native)。您可以通过浏览代码来查看驱动程序是如何实现该操作的。