IEnumerable <WriteModel <MongoMtgDeck> > CreateDeckUpdatePlan(IDictionary <string, MongoMtgDeck> internalDecks, IEnumerable <IMtgDeck> externalDecks) { var plan = new LinkedList <WriteModel <MongoMtgDeck> >(); foreach (var externalDeck in externalDecks) { if (internalDecks.ContainsKey(externalDeck.Name)) { var internalDeck = internalDecks[externalDeck.Name]; if (DifferencesExist(internalDeck, externalDeck)) { var mongoDeck = MongoMtgDeck.FromMtgDeck(externalDeck); mongoDeck._id = internalDeck._id; var replaceOneFilter = _filter.Eq("_id", mongoDeck._id); var newPlan = new ReplaceOneModel <MongoMtgDeck>( replaceOneFilter, mongoDeck ); plan.AddLast(newPlan); } } else { var newPlan = new InsertOneModel <MongoMtgDeck>(MongoMtgDeck.FromMtgDeck(externalDeck)); plan.AddLast(newPlan); } } return(plan); }
public void UpdateAllDecks(IEnumerable <IMtgDeck> externalDecks) { database.DropCollection(MongoCollection); EnsureCollectionExists(database); var mongoCards = externalDecks.Select(externalDeck => { var deck = MongoMtgDeck.FromMtgDeck(externalDeck); deck.id = CreateUniqueIdForDeck(deck); return(deck); }); collection.InsertMany(mongoCards); }