22
votes

I can't seem to get a response from mongodb. I am using node.js and mongodb with the help of mongoose.

In my node.js app I have

mongoose.connect('mongodb://localhost:27017/myDB');

var Schema = mongoose.Schema,
    ObjectId = Schema.ObjectId;

var BlogPost = new Schema({
    author  : ObjectId,
    title   : String,
    slug    : { type: String, lowercase: true, trim: true },
    content : String,
    summary : String,
    date    : Date
})

var BlogModel = mongoose.model('BlogPost', BlogPost);

BlogModel.find({}, function(docs){
   console.log(docs);
});

If I type show dbs in the mongo shell I get

admin   (empty)
myDB       0.203125GB
local   (empty)
test    (empty)

db.blogmodel.find() returns :

{ "_id" : ObjectId("50108d3df57b0e3375a20479"), "title" : "FirstPost" }

and yes I do have mongod running.

Fixed Solution

var BlogModel = mongoose.model('blogmodel', BlogPost, 'blogmodel');

It works because its (model name, schema name, collection name)

3
This issue has driven me crazy! I added credit for your fixed solution part!efkan

3 Answers

41
votes

Mongoose pluralizes model names so it's running find on the "blogposts" collection instead of "blogpost". That said, your query in the mongo shell is on the "blogmodel" collection. In that case:

var BlogModel = mongoose.Model("BlogModel", ..)

or pass the collection name as the third param:

var BlogModel = mongoose.model("BlogPost", schema, "blogmodel")
6
votes

The first parameter to your BlogModel.find callback is err, the second parameter is docs. So your code should be:

BlogModel.find({}, function(err, docs){
   console.log(docs);
});
0
votes

I experienced similar error yesterday, in my case error was caused by data imported to mongo. After I used mongoimport key _id was stored as string instead of ObjectId. When I was querying data in mongo everything works well, but in Mongoose when I was trying find something by _id it always returned null or empty Array. I hope that info might by useful for someone.