Если я правильно понял вопрос, вы хотите обновить документ с содержимым другого документа, но только те поля, которые еще не присутствуют, и полностью игнорировать уже установленные поля (даже если это другое значение).
Невозможно сделать это в одной команде.
Сначала вы должны запросить документ, выяснить, что вы хотите $set
, а затем обновить его (используя старые значения в качестве фильтра соответствия, чтобы убедиться, что вы не получаете параллельных обновлений между ними.
Другое чтение вашего вопроса состояло бы в том, что вы довольны $set
, но не хотите для явного задания всех полей. Как вы могли бы передать данные?
Вы знаете, что можете сделать следующее:
db.collection.update( { _id:...} , { $set: someObjectWithNewData }