在Node.js中执行MongoDB查询
我试图在Node.js中执行此MongoDB命令:在Node.js中执行MongoDB查询,mongodb,node.js,Mongodb,Node.js,我试图在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++;
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
}
})
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)
});
});
这在Mongo命令中非常有效,比如每天给我总结。在Node.js中尝试此操作时:
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
}
})
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中使用时出错了什么?我也遇到了同样的问题。我深入研究了mongodb驱动程序代码 问题是来自子文档的密钥。司机最终得到了类似的结果
obj["timestamp.d"]
这不是你想要的
我发现一个“命令”论点解决了我的问题
db.collection('events', function(err, collection){
collection.group(
[ "timestamp.d" ], // array element, might also work the old way
{ "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
},
true, // use the group command
function(err, results){ self.eventEmitter.emit(doneEvent, results) }
);
})
你可以在这里看到:
从上的第1054行,我发现很难参考Docs API。所以我找到了一些,它们是: 医生在吗
还有更多。我可能已经解决了这个问题,Node运行查询的方式与命令行不同,因此分组不是按
timestamp
的hash元素d
分组,而是按timestamp.d
分组,我可能只是改进了一下-它本身不是Node.js,而是Node mongodb本机驱动程序()。您可以通过浏览代码来查看驱动程序到底是如何实现该操作的。