gpt4 book ai didi

python - Mongoengine update_one+upsert 与不推荐使用的 get_or_create

转载 作者:IT老高 更新时间:2023-10-28 13:33:55 31 4
gpt4 key购买 nike

假设我有一组用 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 depreciated recommend alternative就是使用 update_oneupsert=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 默认字段行为?

最佳答案

目前不自动支持此功能,但可以 - 请添加工单,维护人员可以查看。

与此同时,您可以使用 $setOnInsert仅在插入时设置一个值,并且将复制所需的内容,例如:

Project.objects(code="CL1-002").update_one(set_on_insert__created=Project().created,
set__name="Test Project Two",
set__client="Client One",
upsert=True)

关于python - Mongoengine update_one+upsert 与不推荐使用的 get_or_create,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24738617/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com