Mongoose查询返回null

时间:2012-07-26 02:46:30

标签: mongodb mongoose

我似乎无法得到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);
});

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

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

db.blogmodel.find()返回:

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

是的,我确实有mongod在跑。

已修复解决方案

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

它起作用,因为它(型号名称,模式名称,集合名称)

3 个答案:

答案 0 :(得分:30)

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

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

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

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

答案 1 :(得分:5)

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

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

答案 2 :(得分:0)

昨天我遇到了类似的错误,在我的情况下错误是由导入到mongo的数据引起的。在我使用mongoimport之后,键_id被存储为字符串而不是ObjectId。当我在mongo中查询数据时,一切运行良好,但在我尝试通过_id查找内容时,Mongoose总是返回null或空数组。我希望这些信息对某人有用。