我似乎无法得到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');
它起作用,因为它(型号名称,模式名称,集合名称)
答案 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或空数组。我希望这些信息对某人有用。