Атомное обновление MongoDB через документ «слияние»

Я знаю, что могу атомарно обновить существующий документ Mongo, установив определенные поля. Следующий код сделает это:

var update = MongoDB.Driver.Builders.Update.Set("InsideLegMeasurement", 32.4);
SafeModeResult result = personCollection.Update(query, update, UpdateFlags.Multi,SafeMode.True);

Однако могу ли я автоматически обновить несколько полей, передав документ, который я хочу «объединить» с существующим документом? Представьте, что у меня есть следующий документ: {"favcolor":"red","favfood":"pasta"}, и я хочу обновить существующий документ этими значениями. Я хочу сделать это:

var update = MongoDB.Driver.Builders.Update.Merge({"favcolor":"red","favfood":"pasta"});

или даже

var update = MongoDB.Driver.Builders.Update.Merge(myUpdateBsonDoc);

где myBsonDocument содержит множество полей, которые я не хочу «распаковывать» из документа, который должен быть объединен с оригиналом.

Это возможно как-то?

Спасибо


person Journeyman    schedule 11.05.2011    source источник


Ответы (1)


Нашел ответ:

//var snippetJSON= '{title:"Tin Machine II",brandnewfield:"this gets added nicely"}';
    MongoDB.Bson.BsonDocument updateDoc = MongoDB.Bson.Serialization.BsonSerializer.Deserialize<BsonDocument>(snippetJSON);
var update = new UpdateDocument { { "$set", updateDoc } };

Легко, когда знаешь как!

person Journeyman    schedule 11.05.2011