2011-05-11 6 views
3

Je sais que je peux mettre à jour atomiquement un document Mongo existant en définissant des champs spécifiques. Le code suivant fera:Mise à jour atomique de MongoDB via le document 'fusionner'

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

Cependant, puis-je mettre à jour plusieurs champs atomiquement en passant dans un document que je veux « fusionner » avec le doc existant? Imaginez que j'ai un document comme suit: {"favcolor": "rouge", "favfood": "pâtes"} et je veux mettre à jour un document existant avec ces valeurs. Je veux faire ceci:

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

ou même

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

où myBsonDocument contient beaucoup de domaines que je ne veux pas avoir à « déballer » du document qui doit être fusionné avec le original.

Est-ce possible en quelque sorte?

Merci

Répondre

4

a trouvé la réponse:

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

facile quand vous savez comment!

Questions connexes