0

I have item class:

 class item
    {
        [BsonId]
        public ObjectId _id { get; set; }

        public int code { get; set; }
        public string Name { get; set; }
        public int salePrice { get; set; }
        public int itemCount{ get; set; }


    }

I like to update itemCount by one using the code

I can do this with 2 step:

First: Find the itemCount using code as filter:

 var filter = Builders<item>.Filter.Eq("code", listitems.code);
 var itemsCollection = _database.GetCollection<item>("item");
 var itemsList = itemsCollection.Find(filter).ToList<item>();

Second: Increment itemCount and then update the document:

int itemsCounter = 0;
  if (itemsList.Count()>0)
     itemsCounter = itemsList.ElementAt(0).itemCount;
     itemsCounter++ ;
filter = Builders<item>.Filter.Eq("code", listitems.code);
itemsCollection = _database.GetCollection<item>("item");
var update = Builders<item>.Update.Set("itemCount", itemsCounter);
var result = itemsCollection.UpdateOne(filter, update);

my question: can I do this in one step?

Khorshid
  • 303
  • 4
  • 16

1 Answers1

4

This the answer in one step:

  var filter = Builders<BsonDocument>.Filter.Eq("code", listitems.code);
   var update = new BsonDocument("$inc", new BsonDocument { { "itemCount", 1 } });
   var coll = _database.GetCollection<BsonDocument>("item");
   var doc = coll.FindOneAndUpdateAsync(filter, update).Result;
Khorshid
  • 303
  • 4
  • 16