2015-01-18 4 views
1

Я хочу использовать группу, в моем server.js, но я получаю эту ошибку:Группы по в Node.js-MongoDB

TypeError:Object #(Collection) has no method 'group' 

Я посмотрел в Интернете и увидел то будет имя функции.

Вот что я писал:

var monk = require('monk'); 
var db = monk('localhost:27017/Messages'); 
var collection = db.get('col'); 
collection.group(['a'], {}, {}, {}, function (e, docs) { 
    res.json(docs); 
}); 

Может кто-нибудь сказать мне, что случилось? Спасибо!

+0

Не могли бы Вы предоставить более подробную информацию. Как то, что является переменной 'collection' и все? – Kelsadita

ответ

5

Монах не реализует .group() метод на своем собственном, но есть .col сбруя доступны, из которого вы можете получить родной Collection объект из базового драйвера и использовать его методы.

Ваше использование для .group() немного, поэтому я буду использовать мои данные пример:

{ 
    "_id" : ObjectId("5479c4793815a1f417f537a0"), 
    "status" : "canceled", 
    "date" : ISODate("2014-11-29T00:00:00.000Z"), 
    "offset" : 30, 
}, 
{ 
    "_id" : ObjectId("5479c4793815a1f417d557a0"), 
    "status" : "done", 
    "date" : ISODate("2014-10-20T00:00:00.000Z"), 
    "offset" : 30, 
}, 
{ 
    "_id" : ObjectId("5479c4793815a1f417f117a0"), 
    "status" : "done", 
    "date" : ISODate("2014-12-29T00:00:00.000Z"), 
    "offset" : 30, 
} 

Тогда вы можете просто написать код в .group() подобное заявление:

var db = require('monk')('localhost/test'), 
     sample = db.get('sample'); 

    sample.col.group(
    ["status"], 
    {}, 
    { "count": 0 }, 
    "function (obj,prev) { prev.count++; }", 
    function(err,docs) { 
     if (err) console.log(err); 
     console.log(docs); 
    } 
); 

Но что также показывает, что в 99% случаев вы, вероятно, действительно хотите использовать метод .aggregate():

var db = require('monk')('localhost/test'), 
     sample = db.get('sample'); 

    sample.col.aggregate(
     [ 
      { "$group": { 
       "_id": "$sample", 
       "count": { "$sum": 1 } 
      }} 
     ], 
     function(err,docs) { 
     if (err) console.log(err); 
     console.log(docs); 
     } 
); 

Структура агрегации, как правило, намного более гибкая, чем .group(), и запускает собственные операторы кода в отличие от интерпретируемого JavaScript, поэтому это довольно полезное обучение.

0

Как и сообщение об ошибке, появляется Collection объект не имеет group() как метод. Here is the source of what you're dealing with

И похоже someone else has had an issue with this in the past.

Я не знаю, слишком много использования монаха (извините), но это выглядит очень Обещание привода, поэтому скопировать склеивание решения RomanGorbatko в может быть то, что вам нужно.

+0

Не уверен, что вы лично заинтересованы или просто разместили ссылки, найденные вами в качестве ответа. Но вы можете вызвать '.group()' или любой собственный метод сбора, используя monk. Просто используйте аксессуар '.col'. –

+0

Я этого не знал, спасибо, что подобрал это с правильным ответом :) – TheIronDeveloper

Смежные вопросы