public CardPrice FindAndModifyCardPrice(CardPrice cardPrice, bool upsert = true)
        {
            if (cardPrice == null)
            {
                throw new ArgumentNullException("cardPrice");
            }

            var cardPriceCollection = this.mDatabase.GetCollection <CardPrice>(cCardPriceCollectionName);

            // Query for this card
            var cardQuery = Query.And(
                Query.EQ("name", cardPrice.Name),
                Query.EQ("setCode", cardPrice.SetCode),
                Query.EQ("multiverseId", cardPrice.MultiverseId)
                );

            var cardSoryBy = SortBy.Descending("name");

            // Update document
            var cardUpdate = Update
                             .Set("url", cardPrice.Url)
                             .Set("name", cardPrice.Name)
                             .Set("searchName", cardPrice.SearchName)
                             .Set("lastUpdated", cardPrice.LastUpdated)
                             .Set("setCode", cardPrice.SetCode)
                             .Set("setCodeAlternate", cardPrice.SetCodeAlternate)
                             .Set("priceDiff", cardPrice.PriceDiff)
                             .Set("priceDiffValue", cardPrice.PriceDiffValue)
                             .Set("priceMid", cardPrice.PriceMid)
                             .Set("priceLow", cardPrice.PriceLow)
                             .Set("priceFoil", cardPrice.PriceFoil)
                             .Set("multiverseId", cardPrice.MultiverseId)
                             .Set("imageUrl", cardPrice.ImageUrl);

            // Find and modify document. If document doesnt exist, insert it
            FindAndModifyArgs findModifyArgs = new FindAndModifyArgs();

            findModifyArgs.SortBy          = cardSoryBy;
            findModifyArgs.Query           = cardQuery;
            findModifyArgs.Upsert          = true;
            findModifyArgs.Update          = cardUpdate;
            findModifyArgs.VersionReturned = FindAndModifyDocumentVersion.Modified;

            var cardResult   = cardPriceCollection.FindAndModify(findModifyArgs);
            var cardModified = cardResult.GetModifiedDocumentAs <CardPrice>();

            return(cardModified);
        }
        public bool RemoveCardPrice(CardPrice cardPrice)
        {
            if (cardPrice == null)
            {
                throw new ArgumentNullException("cardPrice");
            }

            var cardPriceCollection = this.mDatabase.GetCollection <CardPrice>(cCardPriceCollectionName);

            var query = Query <CardPrice> .EQ(c => c.Id, cardPrice.Id);

            var removeResult = cardPriceCollection.Remove(query);

            if (removeResult.Response["ok"] == 1)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }