1. Documents(文档)
Mongoose 文档 代表了存储在 MongoDB 中的文档的一对一映射。每个文档都是其 Model 的一个实例。
1.1. 检索
有很多方法可以从 MongoDB 中检索文档。我们不会在这一节中介绍。查看关于查询细节的章节。
1.2. 更新
有许多方法可以更新文件。我们首先看一下使用 findById
的传统方法:
Tank.findById(id, function (err, tank) {
if (err) return handleError(err);
tank.size = 'large';
tank.save(function (err, updatedTank) {
if (err) return handleError(err);
res.send(updatedTank);
});
});
您也可以使用 .set()
来修改文档。在后台,tank.size ='large';
变成 tank.set({size: 'large'})
。
Tank.findById(id, function (err, tank) {
if (err) return handleError(err);
tank.set({ size: 'large' });
tank.save(function (err, updatedTank) {
if (err) return handleError(err);
res.send(updatedTank);
});
});
这种方法首先从 Mongo 检索文档,然后发出更新命令(通过调用 save
触发)。但是,如果我们不需要在我们的应用程序中返回的文档,而只是想直接更新数据库中的属性,Model#update
更新适合我们:
Tank.update({ _id: id }, { $set: { size: 'large' }}, callback);
如果我们确实需要在我们的应用程序中返回的文档,还有另外一个更好的选择:
Tank.findByIdAndUpdate(id, { $set: { size: 'large' }}, { new: true }, function (err, tank) {
if (err) return handleError(err);
res.send(tank);
});
findAndUpdate
/ Remove
静态方法最多只对一个文档进行更改,只需对数据库进行一次调用即可将其返回。 findAndModify 主题有几个变体。阅读 API 文档以获取更多细节。
_注意: findAndUpdate
/ Remove
在数据库中进行更改之前不执行任何钩子或验证。您可以使用 runValidators
选项访问文档验证的有限子集。但是,如果您需要钩子和完整文档验证,请首先查询文档,然后 save()
。
1.3. 验证
文件在被保存之前被验证。阅读 API 文档或验证章节获取更多细节。
1.4. 覆盖
您可以使用 .set()
重写整个文档。如果要更改在中间件中保存的文档,这很方便。
Tank.findById(id, function (err, tank) {
if (err) return handleError(err);
// Now `otherTank` is a copy of `tank`
otherTank.set(tank);
});
1.5. 接下来
现在我们已经介绍了 Documents,让我们来看看 Sub-documents。