title: Node.js - TypeError: Cannot read property 'readPreference' of undefined
body: <p>I am getting a type error while trying to use aggregate method of mongodb in my Node program. I am using node 0.10.16 version and mongodb mongodb-win32-x86_64-2.4.2 version.</p>
  
  <p>Here are the details of my 'relation' table in mongodb -
  `</p>
  
  <blockquote>
    <p>db.relation.find().forEach(printjson)</p>
  </blockquote>
  
  <pre><code>{ "_id" : ObjectId("518808811189128048034c7b") }
  {
          "username" : "51880fa37901642c36000001",
          "selectedoption" : "RCB",
          "question" : "Which team is going to win IPL6?",
          "_id" : ObjectId("5188137dee3a599c34000001")
  }
  {
          "username" : "51880fa37901642c36000001",
          "selectedoption" : "Mumbai",
          "question" : "Which team is going to win IPL6?",
          "_id" : ObjectId("518c2bd0afa8d2e82b000001")
  }
  {
          "username" : "51880fa37901642c36000001",
          "selectedoption" : "Mumbai",
          "question" : "Which team is going to win IPL6?",
          "_id" : ObjectId("518c2c81681aae0838000001")
  }
  {
          "username" : "51880fa37901642c36000001",
          "selectedoption" : "RCB",
          "question" : "Which team is going to win IPL6?",
          "_id" : ObjectId("518c2c90681aae0838000002")
  }
  {
          "username" : "51880fa37901642c36000001",
          "selectedoption" : "CSK",
          "question" : "Which team is going to win IPL6?",
          "_id" : ObjectId("518c2cefc7dc797c08000001")
  }
  {
          "username" : "51880fa37901642c36000001",
          "selectedoption" : "Mumbai",
          "question" : "Which team is going to win IPL6?",
          "_id" : ObjectId("518c2d48a2afbdc426000001")
  }
  {
          "username" : "51880fa37901642c36000001",
          "selectedoption" : "RCB",
          "question" : "Which team is going to win IPL6?",
          "_id" : ObjectId("518c2e2fa2afbdc426000002")
  }
  {
          "username" : "521fda91a6abb63037000001",
          "selectedoption" : "RCB",
          "question" : "Which team is going to win IPL6?",
          "_id" : ObjectId("521fda9ea6abb63037000002")
  }
  {
          "username" : "521fda91a6abb63037000001",
          "selectedoption" : "CSK",
          "question" : "who will IPL this year?",
          "_id" : ObjectId("521fdb3ba6abb63037000003")
  }
  {
          "username" : "521fda91a6abb63037000001",
          "selectedoption" : "Mumbai",
          "question" : "Which team is going to win IPL6?",
          "_id" : ObjectId("521fde8da6abb63037000004")
  }
  {
          "username" : "521fda91a6abb63037000001",
          "selectedoption" : "CSK",
          "question" : "who will IPL this year?",
          "_id" : ObjectId("521fdef0a6abb63037000005")
  }
  {
          "username" : "521fda91a6abb63037000001",
          "selectedoption" : "Mumbai",
          "question" : "Which team is going to win IPL6?",
          "_id" : ObjectId("521fdf1aa6abb63037000006")
  }
  {
          "username" : "521fda91a6abb63037000001",
          "selectedoption" : "RCB",
          "question" : "Which team is going to win IPL6?",
          "_id" : ObjectId("521fdffe257b59cc3f000001")
  }
  {
          "username" : "521fda91a6abb63037000001",
          "selectedoption" : "Mumbai",
          "question" : "Which team is going to win IPL6?",
          "_id" : ObjectId("521fe09c827ff1e418000001")
  }
  {
          "username" : "521fda91a6abb63037000001",
          "selectedoption" : "CSK",
          "question" : "Which team is going to win IPL6?",
          "_id" : ObjectId("521fe0cb5022f0c03c000001")
  }
  {
          "username" : "521fda91a6abb63037000001",
          "selectedoption" : "Mumbai",
          "question" : "Which team is going to win IPL6?",
          "_id" : ObjectId("521fe1558b82555c25000001")
  }
  {
          "username" : "521fda91a6abb63037000001",
          "selectedoption" : "CSK",
          "question" : "Which team is going to win IPL6?",
          "_id" : ObjectId("521fe17d8b82555c25000002")
  }
  {
          "username" : "521fda91a6abb63037000001",
          "selectedoption" : "CSK",
          "question" : "Which team is going to win IPL6?",
          "_id" : ObjectId("521fe2e8c134b7bc40000001")
  }
  {
          "username" : "521fda91a6abb63037000001",
          "selectedoption" : "CSK",
          "question" : "who will IPL this year?",
          "_id" : ObjectId("521fe354b59421cc07000001")
  }
  {
          "username" : "521fda91a6abb63037000001",
          "selectedoption" : "RCB",
          "question" : "Which team is going to win IPL6?",
          "_id" : ObjectId("521fe392b59421cc07000002")
  }
  </code></pre>
  
  <p>This is all rough data in above table ( collection in mongodb ). I need a 'group by' in sql terms on the above table on the basis of 'selectedoption' column and just need a count on that. So the result will be a count on 'RCB', 'CSK', 'Mumbai' data.
  Here is my sample node snippet, removed un-required lines, I am using express server -</p>
  
  <pre><code>var express = require('express'),
    routes = require('./routes'),
    user = require('./routes/user'),
    http = require('http'),
    path = require('path');
  
  var app = express();
  var mongo = require('mongodb');
  var db = new mongo.Db('voteapp', new mongo.Server("127.0.0.1", 27017, {
    auto_reconnect: true
  }, {
    safe: false,
    strict: false
  }))
  
  app.get('/test', function(req, res) {
    res.send('works');
    db.collection('relation', function(err, collection){ 
      console.log('in');
      collection.aggregate({$group : {_id: "$selectedoption", selectedoption: {$sum: 1}}});
      console.log('out');
    });
  });
  </code></pre>
  
  <p>The above line - </p>
  
  <blockquote>
    <p>collection.aggregate({$group : {_id: "$selectedoption",
    selectedoption: {$sum: 1}}})</p>
  </blockquote>
  
  <p>gives me the following error in node console</p>
  
  <blockquote>
    <p>TypeError: <strong>Cannot read property 'readPreference' of undefined
        at Collection.aggregate</strong> (D:\mongo-js - 1\node_modules\mongodb\lib\mongodb\collection.js:1632:17)</p>
  
  <pre><code>at D:\mongo-js - 1\app.js:107:16
  at Db.collection (D:\mongo-js - 1\node_modules\mongodb\lib\mongodb\db.js:461:44)
  at D:\mongo-js - 1\app.js:105:6
  at callbacks (D:\mongo-js - 1\node_modules\express\lib\router\index.js:161:37)
  at param (D:\mongo-js - 1\node_modules\express\lib\router\index.js:135:11)
  at pass (D:\mongo-js - 1\node_modules\express\lib\router\index.js:142:5)
  at Router._dispatch (D:\mongo-js - 1\node_modules\express\lib\router\index.js:170:5)
  at Object.router (D:\mongo-js - 1\node_modules\express\lib\router\index.js:33:10)
  at next (D:\mongo-js - 1\node_modules\express\node_modules\connect\lib\proto.js:190:15)
  </code></pre>
  </blockquote>
  
  <p>-
  It runs fine in the mongodb console and gives me following output -</p>
  
  <pre><code>&gt; db.relation.aggregate({$group : {_id: "$selectedoption", selectedoption: {$sum: 1}}});
  {
          "result" : [
                  {
                          "_id" : "CSK",
                          "selectedoption" : 9
                  },
                  {
                          "_id" : "Mumbai",
                          "selectedoption" : 10
                  },
                  {
                          "_id" : "RCB",
                          "selectedoption" : 8
                  },
                  {
                          "_id" : null,
                          "selectedoption" : 1
                  }
          ],
          "ok" : 1
  }
  </code></pre>
  
  <p>I would really appreciate any pointers or guidance to resolve this issue.</p>