Я пытаюсь выполнить эту команду MongoDB в Node.js:Выполнение запросов MongoDB в 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
}
})
Это прекрасно работает с командой Монго, как дать мне резюме в день. Когда я пытаюсь это в 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) }
);
})
я получаю один результат со всеми итоговыми в день подводились вместе, поэтому в основном суммы счета, пустые, Redos за весь период.
Что делается неправильно при попытке конвертировать запрос в Node.js?
Возможно, я решил проблему, Узел запускает запрос иначе, чем в командной строке, поэтому группировка не группируется хэш-элементом 'd'' timestamp', а 'timestamp.d' – trobrock
Я могу просто улучшить on - это не node.js как таковой, а родной драйвер node-mongodb (https://github.com/christkv/node-mongodb-native). Вы можете проверить, как именно операция была реализована драйвером, просмотрев код. –