模型(Models)
Models 是从 Schema
编译来的构造函数。 它们的实例就代表着可以从数据库保存和读取的 documents。 从数据库创建和读取 document 的所有操作都是通过 model 进行的。
编译你的第一个 model
var schema = new mongoose.Schema({ name: 'string', size: 'string' });
var Tank = mongoose.model('Tank', schema);
第一个参数是跟 model 对应的集合( collection )名字的 单数 形式。 Mongoose 会自动找到名称是 model 名字 复数 形式的 collection 。 对于上例,Tank 这个 model 就对应数据库中 tanks 这个 collection。.model()
这个函数是对 schema
做了拷贝(生成了 model)。 你要确保在调用 .model()
之前把所有需要的东西都加进 schema
里了!
构造 documents
Documents 是 model 的实例。 创建它们并保存到数据库非常简单:
var Tank = mongoose.model('Tank', yourSchema);
var small = new Tank({ size: 'small' });
small.save(function (err) {
if (err) return handleError(err);
// saved!
})
// or
Tank.create({ size: 'small' }, function (err, small) {
if (err) return handleError(err);
// saved!
})
要注意,直到 model 使用的数据库连接( connection )被打开,tanks 才会被创建/删除。每个 model 都有一个绑定的连接。 如果 model 是通过调用 mongoose.model()
生成的,它将使用 mongoose 的默认连接。
mongoose.connect('localhost', 'gettingstarted');
如果自行创建了连接,就需要使用 connection 的 model()
函数代替 mongoose 的 model()
函数。
var connection = mongoose.createConnection('mongodb://localhost:27017/test');
var Tank = connection.model('Tank', yourSchema);
查询
用 mongoose 查询文档相当容易啦,它支持 MongoDB 的高级( rich )查询语法。 查询文档可以用 model
的 find, findById, findOne, 和 where 这些静态方法。
Tank.find({ size: 'small' }).where('createdDate').gt(oneYearAgo).exec(callback);
要了解 Query api 的更多细节,可以查阅 querying 章节。
删除
model
的 remove
方法可以删除所有匹配查询条件( conditions
)的文档。
Tank.remove({ size: 'large' }, function (err) {
if (err) return handleError(err);
// removed!
});
更新
model
的 update
方法可以修改数据库中的文档,不过不会把文档返回给应用层。查阅 API 了解更多详情。
如果想更新单独一条文档并且返回给应用层,可以使用 findOneAndUpdate 方法。
更多
API 文档中包含了很多额外的方法,比如 count, mapReduce, aggregate, 还有 其他
下一步
现在我们已经介绍过了 Models
,接下来是 Documents。