2012-07-26 96 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或空數組。我希望這些信息對某人有用。