Mongoengine 简明教程

MongoEngine - Add/Delete Document

我们已使用 Document 类的 save() 方法在集合中添加了一个文档。还可以使用以下参数进一步自定义 save() 方法:

force_insert

默认为 False,如果设置为 True,则不允许更新现有文档。

validate

验证文档;设置为 False 以跳过。

clean

调用文档清理方法,验证参数应为 True。

write_concern

将用作执行 getLastError 命令所产生的选项。例如,save(…​, write_concern={w: 2, fsync: True}, …​) 将会等到至少两个服务器记录了写入,并且会强制对主服务器进行 fsync。

cascade

设置级联保存的标志。您可以通过在文档中设置 meta 中的“级联”来设置默认值。

cascade_kwargs

可传递给级联保存的可选关键字参数。相当于级联= True。

_refs

在级联保存中使用的已处理引用的列表

save_condition

仅在数据库中的匹配记录满足条件时执行保存。如果不满足条件,则引发 OperationError。

signal_kwargs

要传递给信号调用的 kwargs 字典。

在调用保存之前,您可以设置用于文档验证的清理规则。通过提供自定义 clean() 方法,您可以执行任何预验证/数据清理。

class MyDocument(Document):
   ...
   ...

   def clean(self):
      if <condition>==True:
         msg = 'error message.'
         raise ValidationError(msg)

请注意,只有在启用验证时才会调用 Cleaning,并且在调用 save() 时也会调用。

Document 类还具有 insert() 方法来执行批量插入。它具有以下参数:

doc_or_docs

待插入的文档或文档列表

load_bulk

如果为 True,则返回文档实例列表

write_concern

额外的关键字参数传递到 insert(),它将用作生成 getLastError 命令的选项。

signal_kwargs

(可选) 将传递给信号调用的 kwargs 词典

如果文档包含任何 ReferenceField 对象,则默认情况下 save() 方法不会保存对这些对象的任何更改。如果您希望保存所有引用,而不会注意到每个 save 都是一个单独的查询,那么将 cascade 作为 True 传递给 save 方法将级联任何保存。

通过调用 delete() 方法从集合中删除文档非常容易。请记住,只有在之前已保存文档时此操作才会生效。delete() 方法具有以下参数:

signal_kwargs

(可选) 将传递给信号调用的 kwargs 词典。

write_concern

传递的额外关键字参数将用作生成 getLastError 命令的选项。

要从数据库中删除整个集合,请使用 drop_collecction() 方法。它从数据库中删除与此 Document 类型关联的整个集合。如果未设置文档集合(例如,如果它是抽象的),则该方法会引发 OperationError。

文档类中的 modify() 方法在数据库中执行文档的原子更新并重新加载其更新版本。如果文档已更新,则返回 True;如果数据库中的文档与查询不匹配,则返回 False。请注意,如果该方法返回 True,则对该文档所做的所有尚未保存的更改将被拒绝。

Parameters

query

只有当数据库中的文档与查询匹配时,才会执行更新

update

Django-style update keyword arguments