# 模型(models)
> 原文:[Models](http://mongoosejs.com/docs/models.htm)
> 翻译:小虾米(QQ:509129)
## Models
从我们的Schema定义[模型](http://mongoosejs.com/docs/api.html#model-js)的构造函数编译。实例这些模型代表[文档](http://mongoosejs.com/docs/documents.html)可以从我们的数据库中保存和检索。从数据库中依靠这些模型来操作所有文档创建和检索。
### 编译你的第一个模型
```
var schema = new mongoose.Schema({ name: 'string', size: 'string' });
var Tank = mongoose.model('Tank', schema);
```
第一个参数是你的模型集合的单数名称。Mongoose会自动寻找你的模型名称的复数形式。因此,对于上面的示例,模型`Tank`是用于数据库中的`tanks`集合的。.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!
})
```
请注意,没有`tanks` 将创建/删除,直到连接您的模型使用是打开的。每一个模型都有一个关联的连接。当你使用`mongoose.model()`。你的模型将要使用默认mongoose连接。
```
mongoose.connect('localhost', 'gettingstarted');
```
如果你创建一个自定义的连接,使用连接的`model()`函数代替。
```
var connection = mongoose.createConnection('mongodb://localhost:27017/test');
var Tank = connection.model('Tank', yourSchema);
```
### 查询
对于Mongoosecha的查找文档很容易,它支持[丰富](http://www.mongodb.org/display/DOCS/Advanced+Queries)的查询MongoDB语法。文件可以使用每个模型中使用 [find](http://mongoosejs.com/docs/api.html#model_Model.find),[findById](http://mongoosejs.com/docs/api.html#model_Model.findById),[findOne](http://mongoosejs.com/docs/api.html#model_Model.findOne),或者[where](http://mongoosejs.com/docs/api.html#model_Model.where),静态方法。
```
Tank.find({ size: 'small' }).where('createdDate').gt(oneYearAgo).exec(callback);
```
查看关于如何使用[查询](http://mongoosejs.com/docs/api.html#query-js)API的详细信息的[querying](http://mongoosejs.com/docs/queries.html)章节。
### 删除
模型有一个静态删除方法,可用于移除所有匹配条件的文档。
```
Tank.remove({ size: 'large' }, function (err) {
if (err) return handleError(err);
// removed!
});
```
### 更新
每个模型都有自己的更新方法,用于修改数据库中的文档,不将它们返回到您的应用程序。
详细看[API](http://mongoosejs.com/docs/api.html#model_Model.update)文档。
如果你想要更新一个文档数据库,并将结果返回给你的应用程序,使用[`findOneAndUpdate`](http://mongoosejs.com/docs/api.html#model_Model.findOneAndUpdate)代替。
### 然而,更多的
API文档包含了许多额外的方法,像 [count](http://mongoosejs.com/docs/api.html#model_Model.count),[mapReduce](http://mongoosejs.com/docs/api.html#model_Model.mapReduce),[aggregate](http://mongoosejs.com/docs/api.html#model_Model.aggregate),[更多](http://mongoosejs.com/docs/api.html#model_Model.findOneAndRemove)。