MongoEngine - 添加/删除文档



我们已经使用了 Document 类的 save() 方法来将文档添加到集合中。save() 方法可以通过以下参数进一步自定义:

force_insert 默认为 False,如果设置为 True,则不允许更新现有文档。
validate 验证文档;设置为 False 以跳过。
clean 调用文档的 clean 方法,validate 参数应为 True。
write_concern 将用作生成的 getLastError 命令的选项。例如,save(..., write_concern={w: 2, fsync: True}, ...) 将等待至少两台服务器记录写入,并将在主服务器上强制执行 fsync。
cascade 设置级联保存的标志。您可以通过在文档的 __meta__ 中设置“cascade”来设置默认值。
cascade_kwargs 传递给级联保存的可选关键字参数。等效于 cascade=True。
_refs 级联保存中使用的已处理引用的列表
save_condition 仅当数据库中的匹配记录满足条件时才执行保存。如果条件不满足,则引发 OperationError
signal_kwargs 传递给信号调用的 kwargs 字典。

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

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

请注意,仅当验证开启且在调用 save() 时才会调用清理。

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

doc_or_docs 要插入的文档或文档列表
load_bulk 如果为 True,则返回文档实例列表
write_concern 额外的关键字参数将传递给 insert(),并将用作生成的 getLastError 命令的选项。
signal_kwargs (可选)传递给信号调用的 kwargs 字典

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

从其集合中删除文档非常简单,只需调用 delete() 方法即可。请记住,只有在文档先前已保存的情况下,它才会生效。delete() 方法具有以下参数:

signal_kwargs (可选)传递给信号调用的 kwargs 字典。
write_concern 传递的其他关键字参数将用作生成的 getLastError 命令的选项。

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

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

参数

query 仅当数据库中的文档与查询匹配时,才会执行更新
update Django 风格的更新关键字参数
广告