53 votes

Upserting dans Mongo DB à l'aide du pilote C# officiel

Dans la documentation officielle de mongodb, ils mentionnent les upserts, donc ce serait vraiment bien d'écrire une commande upsert au lieu de :

 if (_campaignRepo.Exists(camp))
{
    _campaignRepo.DeleteByIdAndSystemId(camp);
}

_campaignRepo.Save(camp);

quelque chose qui mettrait en œuvre cette logique au niveau de la base de données si cela est possible. Alors, quelle est la façon de faire un upsert s'il y en a un ?

39voto

Christian Horsdal Points 2481

Le code suivant provient d'une application fonctionnelle :

 weekplanStore.Update(
    Query.EQ("weekNumber", week),
    Update.Replace(rawWeekPlan),
    UpdateFlags.Upsert);

Le weekplanStore est ma collection MongoDB, et le code mettra à jour le document trouvé avec la requête dans le premier argument ou en insérera un nouveau si aucun n'est trouvé. Le "truc" consiste à utiliser le modificateur UpdateFlags.Upsert.

Le rawWeekPlan est l'objet inséré ou mis à jour, et a le type suivant :

 private class RawWeekPlan
{
    public ObjectId id;
    public int weekNumber;
    public WeekPlanEntry[] entries;
}

et transformé en bson par le conducteur automatiquement.

6voto

jeffsaracco Points 769

Vous pouvez utiliser la commande de mise à jour régulière, mais transmettez-lui simplement l'indicateur de mise à jour Upsert

 MongoCollection collection = db.GetCollection("matches");
var query = new QueryDocument("recordId", recordId);

var update = Update.Set("FirstName", "John").Set("LastName","Doe");
matchCollection.Update(query, update, UpdateFlags.Upsert, SafeMode.False);

Ce code est adapté d'une application fonctionnelle (raccourci pour plus de clarté)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X