🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 文档(documents) > 原文:[Documents](http://mongoosejs.com/docs/documents.html) > 翻译:小虾米(QQ:509129) ## Documents Mongoose[文档](http://mongoosejs.com/docs/api.html#document-js)代表了文档存储在MongoDB的一对一映射。每个文档都是它的[模型](http://mongoosejs.com/docs/models.html)的一个实例。 ### 检索 有许多方法从MongoDB文档检索。我们不会涵盖在在这一部分中。查看查询详细信息的[‘querying’](http://mongoosejs.com/docs/queries.html)章节。 ### 更新 有一些方法来更新文档。我们先看看使用`findById`的传统方法: ``` Tank.findById(id, function (err, tank) { if (err) return handleError(err); tank.size = 'large'; tank.save(function (err) { if (err) return handleError(err); res.send(tank); }); }); ``` 这种方法包括首先检索文档从Mongo,然后发出更新命令(通过触发调用保存)。然而,如果我们不需要的文档在我们的应用程序中返回,只需要更新一个属性直接在数据库、`Model#update`对我们是正确的: ``` Tank.update({ _id: id }, { $set: { size: 'large' }}, callback); ``` 如果我们的应用程序需要文档返回,则需要另一个方法,往往[更好](http://mongoosejs.com/docs/api.html#model_Model.findByIdAndUpdate),选项: ``` Tank.findByIdAndUpdate(id, { $set: { size: 'large' }}, function (err, tank) { if (err) return handleError(err); res.send(tank); }); ``` `findAndUpdate/Remove` 静态方法都在最多一个文档中进行更改,并返回它只有一个调用数据库。有几种不同的`findandmodify`主题。阅读[API文档](http://mongoosejs.com/docs/api.html)的更多细节。注意`findAndUpdate/Remove`不执行任何钩子或验证在在数据库中进行更改 之前。如果你需要钩子和验证,首先查询文档,然后保存它。 > 译者注:[findByIdAndRemove](http://mongoosejs.com/docs/api.html#model_Model.findByIdAndRemove),[findOneAndUpdate](http://mongoosejs.com/docs/api.html#model_Model.findOneAndUpdate),[findAndModify](https://docs.mongodb.com/manual/reference/command/findAndModify/) ### 验证 在保存文档之前,文档进行了验证。详情阅读[API文档](http://mongoosejs.com/docs/api.html#document_Document-validate)或[validation](http://mongoosejs.com/docs/validation.html)章节。 ### 下一步 既然我们已经掌握了文档,让我们看看[子文档](http://mongoosejs.com/docs/subdocs.html)。