public void AddFulFillmentSafe(SalesOrderFulfillmentRequest request) { var database = client.GetDatabase(DatabaseName); var collection = database.GetCollection <SalesOrderDocument>(CollectionName); var fb = Builders <SalesOrderDocument> .Filter; var lineItemFb = Builders <SalesOrderDocument.Fulfillment> .Filter; var filter = fb.Eq(s => s.OrderId, request.OrderId) & fb.ElemMatch(s => s.Fulfillments, lineItemFb.Ne(s => s.FulfillmentId, request.FulfillmentId)); var updateDefinition = Builders <SalesOrderDocument> .Update; var updateItems = new List <UpdateDefinition <SalesOrderDocument> > { updateDefinition.Push(s => s.Fulfillments, new SalesOrderDocument.Fulfillment { FulfillmentId = request.FulfillmentId, FulfillmentDate = request.Date, LineItems = request.LineItems.Select(s => new SalesOrderDocument.Fulfillment.FulfillmentLineItem { ProductId = s.ProductId, Quantity = s.Quantity }).ToList() }) }; var result = collection.UpdateOne(filter, updateDefinition.Combine(updateItems)); Debug.WriteLine(JsonConvert.SerializeObject(result)); }
public void AddFulFillment(SalesOrderFulfillmentRequest request) { var database = client.GetDatabase(DatabaseName); var collection = database.GetCollection <SalesOrderDocument>(CollectionName); var query = collection.AsQueryable(); var order = query.Single(s => s.OrderId == request.OrderId); order.Fulfillments.Add(new SalesOrderDocument.Fulfillment { FulfillmentId = request.FulfillmentId, FulfillmentDate = request.Date, LineItems = request.LineItems.Select(s => new SalesOrderDocument.Fulfillment.FulfillmentLineItem { ProductId = s.ProductId, Quantity = s.Quantity }).ToList() }); var fb = Builders <SalesOrderDocument> .Filter; var filter = fb.Eq(s => s.OrderId, request.OrderId); var result = collection.ReplaceOne(filter, order); Debug.WriteLine(JsonConvert.SerializeObject(result)); }