使用Mongoose列出集合项

使用Mongoose列出集合项,mongoose,Mongoose,这个问题与“类似”,但我要求的是替代方案(如果存在) 我在mongo shell中创建了一个dbNums,其中包含一个集合numbers。 使用mongoose作为ODM,我想访问该集合并列出编号 var mongoose = require('mongoose') , Schema = mongoose.Schema; mongoose.connect('mongodb://localhost/Nums'); mongoose.model('numbers', new Schema({v

这个问题与“类似”,但我要求的是替代方案(如果存在)

我在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.model
newschema
调用?这一步可以绕过吗

尽管这一步必须编写一次,但如果我有一个非常大的模式,那么仅仅从mongo中拉出一个db/集合似乎是非常乏味的


是否有解决方法,或者这是唯一的途径

如果要使用MongooseAPI访问集合,需要为其定义一个模式。如果您不想为集合定义架构,则需要使用or来访问它。

经过一些实验后,答案是“您必须指定架构和模型,但没有那么糟糕”

例如,我可以:

mongoose.connect('mongodb://localhost/Nums');
mongoose.model('numbers', new Schema());
但正如@johnyhk提到的,你错过了野外类型的铸造

此外,假设您有一个大型架构,您可以指定要强制转换的类型:

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

我只铸了两块地

我刚试过这个。。。可以简单地调用
mongoose.model('numbers',newschema())不指定架构布局。@user1460015您可以使用空架构,但这样会丢失很多Mongoose功能,如字段类型转换。我有点困惑,如果你不想要这些功能,为什么要使用猫鼬。这只是偏好。如果我的模式看起来像这样,我将不得不利用字段类型转换。似乎我可以输入强制转换某些字段,但我不必全部执行。