MongoDB атомное обновление через документ 'слияния' - PullRequest
3 голосов
/ 11 мая 2011

Я знаю, что могу атомарно обновить существующий документ 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 содержит множество полей, которые я не хочу «распаковывать» из документа, который должен быть объединен с оригиналом.

Возможно ли это как-нибудь?

Спасибо

1 Ответ

5 голосов
/ 11 мая 2011

Нашел ответ:

//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 } };

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

...