Mongoose查询返回null

los*_*aut 18 mongoose mongodb

我似乎无法得到mongodb的回应.我在mongoose的帮助下使用node.js和mongodb.

在我的node.js应用程序中

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);
});
Run Code Online (Sandbox Code Playgroud)

如果我在mongo shell中键入show dbs,我会得到

admin   (empty)
myDB       0.203125GB
local   (empty)
test    (empty)
Run Code Online (Sandbox Code Playgroud)

db.blogmodel.find()返回:

{ "_id" : ObjectId("50108d3df57b0e3375a20479"), "title" : "FirstPost" }
Run Code Online (Sandbox Code Playgroud)

是的,我确实有mongod在运行.

固定解决方案

var BlogModel = mongoose.model('blogmodel', BlogPost, 'blogmodel');
Run Code Online (Sandbox Code Playgroud)

它的工作原理是因为它(型号名称,模式名称,集合名称)

aar*_*ann 30

Mongoose使模型名称复数化,因此它find在"blogposts"集合而不是"blogpost"上运行.也就是说,你在mongo shell中的查询是在"blogmodel"集合中.在这种情况下:

var BlogModel = mongoose.Model("BlogModel", ..)
Run Code Online (Sandbox Code Playgroud)

或者将集合名称作为第三个参数传递:

var BlogModel = mongoose.model("BlogPost", schema, "blogmodel")
Run Code Online (Sandbox Code Playgroud)


Joh*_*yHK 5

BlogModel.find回调的第一个参数是err,第二个参数是docs.所以你的代码应该是:

BlogModel.find({}, function(err, docs){
   console.log(docs);
});
Run Code Online (Sandbox Code Playgroud)