using System; using System.Collections.Generic; using System.Linq; using MongoDB.Bson; using MongoDB.Driver; namespace Mongo.Test { public class UserData { public UserData(Guid userId, int resource) { UserId = userId; Resource = resource; } public Guid UserId { get; set; } public int Resource { get; set; } public override string ToString() { return $@"{GetType().Name}: {UserId}, {Resource}"; } } public class Data { public ObjectId Id { get; set; } public string Name { get; set; } public IEnumerable UserData { get; set; } public override string ToString() { return $@"{GetType().Name}: {Id}, {Name}, {string.Join(",", UserData)}"; } } class Program { static void Main(string[] args) { var mongoUrl = MongoUrl.Create(@"mongodb://localhost/test"); var client = new MongoClient(mongoUrl); client.DropDatabase(mongoUrl.DatabaseName); var database = client.GetDatabase(mongoUrl.DatabaseName); var collection = database.GetCollection(nameof(Data)); var userId = Guid.NewGuid(); var data = new Data { Name = "The Name", UserData = new List { new UserData(userId, 1) } }; collection.InsertOne(data); // At this point, the document looks correct in mongodb and find works: var result = collection.Find(d => d.UserData.Any(u => u.UserId == userId)).FirstOrDefault(); Console.WriteLine(result); var updates = new Dictionary { [nameof(Data.Name)] = "The New Name", [nameof(Data.UserData)] = new List { new UserData(userId, 2) } }; var builder = new UpdateDefinitionBuilder(); var mongoUpdates = updates.Select(propertyUpdate => builder.Set(propertyUpdate.Key, propertyUpdate.Value)); var update = builder.Combine(mongoUpdates); var idFilter = new FilterDefinitionBuilder().Eq(p => p.Id, data.Id); collection.UpdateOne(idFilter, update); // Now, the document's UserData property is incorrect in mongodb and find does not work: var result2 = collection.Find(d => d.UserData.Any(u => u.UserId == userId)).FirstOrDefault(); Console.WriteLine(result2); } } }