2015-12-23 42 views
0

我可以使用mongo命令在終端(如db.getCollection('catalog').find({user_id:"56703f1a2fc76861e6a8743e"}))中檢索我的數據,但是當我嘗試在nodejs中得到空值時。無法通過id使用mongodb獲取數據

我的路線是這樣的

var Catalog = require('../models/catalog'); 

router.get('/', function(req, res) { 
    if (!req.user) { 
    res.redirect('/login'); 
    } else{ 
    Catalog.getAllCatalog('56703f1a2fc76861e6a8743e', function(catalog){ 
     console.log(catalog) //null 
     res.render('catalog/index'); 
    }); 
    } 
}); 

我的目錄

var Catalog = module.exports = mongoose.model('catalog', catalogScheme); 
module.exports.getAllCatalog = function(user_id, callback){ 
    Catalog.find({"user_id":user_id}, callback); 
} 

任何思想的模型?

+2

您確定配置了Mongoose模式,因此它使用'catalog'集合嗎?默認情況下,它將使用'catalogs'(複數)([documentation](http://mongoosejs.com/docs/guide.html#collection))。另外,你是否在你的模式中聲明'user_id'是一個字符串?也許你應該在你的問題中包含你的模式。 – robertklep

+0

@robertklep沒有拼寫錯誤。這裏的模式看起來像http://pastebin.com/B5kgZ0Dn。還有一件事,mongoose.model('catalog')意味着你的集合必須被命名爲'catalog'吧? –

回答

3

首先,@chridam已經在他們的回答中指出,Node.js的約定回調是,他們有(至少)兩個參數:第一個保留傳遞錯誤,第二個(也可能是其他)用於傳遞結果數據。其次,默認情況下,Mongoose將採用模型名稱(您的案例中的catalog)和小寫字母,並將其複數化以確定它將使用的MongoDB集合名稱。因此,您的型號catalog默認使用名爲catalogs的集合。此行爲記錄在here

由於您的數據存儲在名爲catalog(單數)的集合中,因此您的查詢不會產生任何結果。爲了解決這個問題,你需要在貓鼬應該使用catalog作爲集合的模式,以指定:

var catalogScheme = mongoose.Schema({ 
    ... 
}, { collection : 'catalog' }); 

編輯:您還可以禁用名稱完全重整,這將貓鼬使用型號名稱爲集合名稱:

var mongoose = require('mongoose'); 
mongoose.set('pluralization', false); 

// create your schema/models from here... 
+0

那麼'mongoose.model('catalog',catalogScheme)''做了什麼?第一個參數?這不是已經意味着我收藏的名字嗎? –

+0

@ NicholeA.Miler不,這就是你的_model_的名字(公平地說,[Mongoose文檔](http://mongoosejs.com/docs/models.html)稱之爲_「集合的單數名稱你的模型是用於「_」的,但後來聲明_「Mongoose自動尋找你的模型名稱的複數形式」)。 – robertklep

+0

嗯好像我必須改變所有的集合名稱有's'。 –

1

您的回調函數只有一個參數,您需要有兩個參數:err對象和result。你可以調整你的代碼的其他條款,如:

Catalog.getAllCatalog('56703f1a2fc76861e6a8743e', function(err, catalog){ 
    if (err) { /* handle error here */ }; 
    console.log(catalog); 
    res.render('catalog/index'); 
}); 
+0

每個回調都是2個參數,是nodejs如何工作的?強制性的? –

+0

試過,但這不是唯一的問題。我得到了空陣列,但用命令我得到了一些東西。 –