Python Mongoengine更新&uOne&x2B;upsert与不推荐的get\u或\u create
假设我有一个文档集合,定义为: 过去,我可以使用Python Mongoengine更新&uOne&x2B;upsert与不推荐的get\u或\u create,python,mongodb,mongoengine,Python,Mongodb,Mongoengine,假设我有一个文档集合,定义为: 过去,我可以使用get\u或\u create方法执行“插入或更新”类型的操作。例如: Project.objects().get_or_create(name="Test Project One", client="Client One", code="CL1-001") 将以下文档添加到集合中: { "name": "Tes
get\u或\u 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"
}
}
现在,该方法使用update\u one
和upsert=True
如下所示:
Project.objects(code="CL1-002").update_one(set__name="Test Project Two",
set__client="Client One",
upsert=True)
但这会导致将文档添加到集合中,而没有创建字段:
{
"client": "Client One",
"code": "CL1-002",
"name": "Test Project Two"
}
是否有任何方法可以在没有竞态条件的情况下复制MongoEngine的get\u或\u create
默认字段行为?这目前不自动支持,但可以-请添加一个记录单,维护人员可以查看
同时,您可以使用它,它仅在插入时设置一个值,并复制所需内容,例如:
Project.objects(code="CL1-002").update_one(set_on_insert__created=Project().created,
set__name="Test Project Two",
set__client="Client One",
upsert=True)
Project.objects(code="CL1-002").update_one(set_on_insert__created=Project().created,
set__name="Test Project Two",
set__client="Client One",
upsert=True)