Как я могу обновить документ с одним требованием и не устанавливать поле существует и установить его еще - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть документ на Монго, и я хочу обновить его одним запросом.Но с моим обновлением я хочу установить какое-то конкретное поле, если поле не существует в документе, и в противном случае, я хочу установить его на то, что я отправляю.

Я могу сделать это с двумя запросами с 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, он создает новый документ!Но я хочу обновить первый и не хочу создавать новый документ.

...