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,则对该文档所做的所有尚未保存的更改将被拒绝。