模型(Models
)的构造函数是编译我们定义的Schema
。这些模型(models
)实例代表可以从我们的数据库中保存和检索文档。所有文档在数据库中的创建与检索都是通过这些模型(models
)处理。
var schema = new mongoose.Schema({ name: 'string', size: 'string' });
var Tank = mongoose.model('Tank', schema);
第一个参数是你的模型在集合中唯一的名称。Mongoose自动搜索你的模型名称的多个版本。因此,对于上面的例子,模型Tank是用于数据库中的Tanks集合。创建了一个schema
副本.model()
函数。确保schema
在调用.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
)连接打开否则不会创建/移除tank。每个模型(Model
)都有个相应的链接。当你使用mongoose.model()
,你的模型(Model
)将使用mongoose
默认连接。
mongoose.connect('localhost', 'gettingstarted');
如果您创建自定义链接,请使用connection.model()
方法创建。
var connection = mongoose.createConnection('mongodb://localhost:27017/test');
var Tank = connection.model('Tank', yourSchema);
使用Mongoose中查找文档非常容易,它支持MongoDB丰富的查询语法。文档检索可以使用models的finde,dindeById,findOne或where静态方法。
Tank.find({ size: 'small' }).where('createdDate').gt(oneYearAgo).exec(callback);
有关如何使用Query
API的更多详细信息,请参阅查询一章。
模型(Model
)有一个静态remove
方法可用于删除符合条件(conditions
)的所有文档。
Tank.remove({ size: 'large' }, function (err) {
if (err) return handleError(err);
// removed!
});
每个模型(model
)都有自己的update
方法修改数据库中的文档(documents
)并将它返回给您的应用程序,请参阅API文档。
如果您要更新数据库中单独的一个文档并将它返回给您的应用程序,请使用findOneAndUpdate
。
这个API文档涵盖了许多其他的方法,像count、mapReduce、aggregate等。
现在我们已经介绍完Models
,让我们来看看文档(Documents)。