Mongodb Upsert только обновить выбранные поля, но вставить все

Я пытаюсь использовать upsert в MongoDB для обновления одного поля в документе, если он найден, ИЛИ вставить целый новый документ с большим количеством полей. Проблема в том, что мне кажется, что MongoDB либо заменяет каждое поле, либо вставляет подмножество полей в свою операцию upsert, то есть он не может вставить больше полей, чем он на самом деле хочет обновить.

Я хочу сделать следующее:

Я запрашиваю одно уникальное значениеЕсли документ уже существует, только значение метки времени (назовем его «lastseen») обновляется до нового значенияЕсли документ не существует, я добавлю его с длинным списком различных пар ключ / значение, которые должны оставаться статическими в течение оставшейся части его срока службы.

Давайте проиллюстрируем:

Этот пример, насколько я понимаю, обновит дату 'lastseen', если 'name' найдено, но если 'name' не найдено, будет только вставлено 'name' + 'lastseen'.

db.somecollection.update({name: "some name"},{ $set: {"lastseen": "2012-12-28"}}, {upsert:true})

Если бы я добавил дополнительные поля (пары ключ / значение) ко второму аргументу и удалил набор $, то каждое поле будет заменено при обновлении, но будет иметь желаемый эффект при вставке. Есть ли что-то вроде $ insert или подобное для выполнения операций только при вставке?

Поэтому мне кажется, что я могу получить только одно из следующего:

Правильное поведение при обновлении, но будет вставлять документ только с подмножеством нужных полей, если документ не существуетПравильное поведение вставки, но затем перезапишет все существующие поля, если документ уже существует

Правильно ли мое понимание? Если да, то возможно ли это решить одной операцией?

Ответы на вопрос(2)

Ваш ответ на вопрос