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

Copyright © tuzhu008 2017 all right reserved,powered by Gitbook该文件修订时间: 2017-12-24 11:39:28

results matching ""

    No results matching ""