У меня есть документ на Монго, и я хочу обновить его одним запросом.Но с моим обновлением я хочу установить какое-то конкретное поле, если поле не существует в документе, и в противном случае, я хочу установить его на то, что я отправляю.
Я могу сделать это с двумя запросами с mongoengine (или пимонго):
class TestModel(Document):
objid = StringField()
name = StringField()
lname = StringField()
temp = TestModel.objects(objid="someid").first()
if not temp:
temp = TestModel(objid="someid")
if not temp.lname:
temp.lname = "somelname"
temp.save()
Но я хочу сделать это с помощью одного запроса.Я пробовал функцию update_many
с upsert=True
, но она не делает это для меня:
TestModelCollection.update_many(
{
"objid": "someid",
"lname": {
"$exists": False
}
},
{
"$set": {
"lname": "somelname"
"name": "somename"
}
},
upsert=True
)
Этот поиск документа без lname
и с someid
как objid
, и еслибыл документ с someid
как objid
с существующим lname
, он создает новый документ!Но я хочу обновить первый и не хочу создавать новый документ.