glaube, ich habe eine Sammlung von Dokumenten definiert mit MongoEngine als:Mongoengine update_one + Upsert vs. auslaufend get_or_create
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)
Historisch ich die get_or_create
Methode verwendet haben könnte eine "insert oder update" Typ Operation auszuführen. Zum Beispiel:
Project.objects().get_or_create(name="Test Project One",
client="Client One",
code="CL1-001")
Welche das folgende Dokument der Sammlung ergänzt:
{
"name": "Test Project One",
"client": "Client One",
"code": "CL1-001",
"created": {
"$date": "2014-07-14T14:00:38.024Z"
}
}
Nun, da diese Methode has been depreciated die recommend alternative verwenden update_one
mit upsert=True
wie folgt:
Project.objects(code="CL1-002").update_one(set__name="Test Project Two",
set__client="Client One",
upsert=True)
Aber Dies führt dazu, dass der Sammlung ein Dokument ohne das Feld created
hinzugefügt wird:
{
"client": "Client One",
"code": "CL1-002",
"name": "Test Project Two"
}
Gibt es eine Möglichkeit ist, das get_or_create
Standard-Feldverhalten mit MongoEngine ohne Race-Bedingung zu replizieren?