2012-11-01 59 views
0

此問題與this「類似」,但我要求替代(如果存在)。使用貓鼬列表收集項目

我在mongo shell中創建了一個db Nums集合numbers
使用mongoose作爲ODM我想訪問該集合並列出數字。

var mongoose = require('mongoose') 
    , Schema = mongoose.Schema; 

mongoose.connect('mongodb://localhost/Nums'); 
mongoose.model('numbers', new Schema({value: Number})); 

mongoose.connection.on('open', function(ref) { 
    console.log('Connected to mongo server.'); 
}); 

mongoose.connection.on('error', function(err) { 
    console.log('Could not connect to mongo server!'); 
    console.log(err); 
}); 

var nums = mongoose.model('numbers'); 
nums.find({}, function(err, data) {console.log(err, data, data.length);}); 

爲了訪問一個已經創建的數據庫/收藏我總是要經過一個mongoose.modelnew Schema電話?這一步可以繞過嗎?

即使這一步必須寫一次,似乎如果我有一個非常大的模式,這將是非常繁瑣的,只是從mongo中拉出一個數據庫/集合。

有沒有解決這個問題的方法或這是唯一的途徑?

回答

0

經過一番嘗試,答案是「你必須指定模式和模型,但並不是那麼糟糕」。

例如,我可以做的:

mongoose.connect('mongodb://localhost/Nums'); 
mongoose.model('numbers', new Schema()); 

但@JohnnyHK提到你錯過了字段類型鑄造。

此外,假設你有一個大的架構,您可以指定要輸入播什麼:

mongoose.connect('mongodb://localhost/Nums'); 
mongoose.model('numbers', new Schema({username: String, address: String})); 

我只型鑄造兩個字段。

0

如果您想使用Mongoose API訪問集合,您需要爲其定義一個模式。如果您不想爲集合定義架構,那麼您需要使用native drivermongojs來訪問它。

+0

我只是試過這個......只需調用'mongoose.model('numbers',new Schema());'而不指定模式佈局。 – user1460015

+0

@ user1460015你可以使用一個空的模式,但是你會失去很多Mongoose的功能,比如字段類型轉換。如果你不想使用這些功能,我對你爲什麼會使用貓鼬有點困惑。 – JohnnyHK

+0

這只是偏好。如果我的模式看起來像這樣http://www.reddit.com/r/funny/.json,我將不得不利用字段類型轉換。看起來我可以打字某些字段,但我不必全部都做。 – user1460015