【发布时间】:2014-09-04 11:49:15
【问题描述】:
假设我有一个用MongoEngine 定义的文档集合:
class Project(Document):
name = StringField(required=True)
client = StringField(required=True)
code = StringField(required=True,unique=True)
created = DateTimeField(required=True,default=datetime.datetime.now)
从历史上看,我可以使用get_or_create 方法来执行“插入或更新”类型的操作。例如:
Project.objects().get_or_create(name="Test Project One",
client="Client One",
code="CL1-001")
将以下文档添加到集合中:
{
"name": "Test Project One",
"client": "Client One",
"code": "CL1-001",
"created": {
"$date": "2014-07-14T14:00:38.024Z"
}
}
现在has been depreciatedrecommend alternative这个方法是使用update_one和upsert=True如下:
Project.objects(code="CL1-002").update_one(set__name="Test Project Two",
set__client="Client One",
upsert=True)
但这会导致将文档添加到集合中而没有 created 字段:
{
"client": "Client One",
"code": "CL1-002",
"name": "Test Project Two"
}
有没有什么方法可以在没有竞争条件的情况下使用 MongoEngine 复制 get_or_create 默认字段行为?
【问题讨论】:
标签: python mongodb mongoengine