无法在没有指定主键的情况下更新文档

问题描述

schema.py:

class Test(Document):
    _id = StringField()
    classID = StringField(required=True,unique=True)
    status = StringField()

====================

database.py:

query = schema.Test(_id = id)
query.update(status = "confirm")

发生严重错误。尝试更新尚未保存的文档

仅当我指定 _id = StringField(primary_key=True) 时,我才能更新数据库,但是如果我插入新数据,_id 必须由我插入,而不是由 MongoDB 自动创建。

有人可以帮我解决问题吗? 谢谢!

解决方法

插入和更新在 MongoDB 中是不同的操作:

  • 插入将文档添加到集合中
  • 更新在给定搜索条件的集合中查找文档,然后更改此文档

如果您尚未插入文档,尝试更新它不会有任何作用,因为任何搜索条件都无法找到它。您的 ODM 向您指出了这一点,并阻止您更新尚未保存的文档。使用驱动程序,您无论如何都可以发布更新,但不会产生任何影响。

如果要向数据库添加新文档,请使用插入。要更改已保存的文档,请使用更新。要更改文档实例上的字段而不保存它们,请查阅您的 ODM 文档以了解如何执行此操作,而不是尝试保存文档。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...