Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Mongoengine更新&uOne&x2B;upsert与不推荐的get\u或\u create_Python_Mongodb_Mongoengine - Fatal编程技术网

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)