2012-07-26 162 views
12

我似乎无法从mongodb获得响应。我在猫鼬的帮助下使用了node.js和mongodb。Mongoose查询返回null

在我的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); 
}); 

如果我在蒙戈外壳型秀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'); 

它的工作原理,因为它(型号名称,架构名称,集合名称)

+1

这个问题让我疯狂!我为您的固定解决方案部分添加了功劳! – efkan 2015-01-09 07:44:03

回答

21

猫鼬复数化模型的名称。也就是说,您在mongo shell中的查询位于“blogmodel”集合中。在这种情况下:

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

或通过集合名称作为第三PARAM:

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

谢谢你,我必须改变它到上述修复,但你的文章帮助我解决它,所以我会给你答案。 – lostAstronaut 2012-07-26 16:34:02

5

的第一个参数你BlogModel.find回调err,第二个参数是docs。所以,你的代码应该是:所以它的运行对“的相关博客文章”集合find而不是“博客帖子”

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

仍然返回空白[]我曾尝试过。 – lostAstronaut 2012-07-26 03:15:11

+0

如果从mongo shell中查询'BlogPosts'集合是否包含文档? – JohnnyHK 2012-07-26 03:18:20

+0

我将它添加到原来的帖子,是的,我有一个文件进行测试,由于某种原因我找不到。 – lostAstronaut 2012-07-26 03:22:38

0

我昨天经历了类似的错误,在我的情况下,错误是由进口蒙戈数据引起的。在我使用mongoimport键后,_id被存储为字符串而不是ObjectId。当我在mongo中查询数据时,一切正常,但在Mongoose中,当我尝试通过_id查找某些内容时,它总是返回null或空数组。我希望这些信息对某人有用。