Solución:
Estás llamando al método Pull(string name, MongoDB.Bson.BsonValue value)
y de acuerdo con los documentos
Elimina todos los valores del elemento de matriz nombrado que son iguales a algún valor (ver $ pull)
y tu proporcionas { "Identifier", productId }
como el valor. Supongo que mongo no encuentra eso exacto valor.
Intente utilizar la segunda sobrecarga de Pull
con condición de consulta en lugar de valor exacto
Elimina todos los valores del elemento de matriz nombrado que coinciden con alguna consulta (ver $ pull).
var update = Update.Pull("Products", Query.EQ("Identifier", productId));
ACTUALIZAR
Desde que mencionas Category
entidad para que pueda sugerir el uso de lambda en lugar de
Query.EQ
:
var pull = Update<Category>.Pull(x => x.Products, builder =>
builder.Where(q => q.Identifier == productId));
Solución con el controlador C # MongoDB. Elimina un solo elemento anidado.
var filter = Builders<YourModel>.Filter.Where(ym => ym.Id == ymId);
var update = Builders<YourModel>.Update.PullFilter(ym => ym.NestedItems, Builders<NestedModel>.Filter.Where(nm => nm.Id == nestedItemId));
_repository.Update(filter, update);
También estaba enfrentando el mismo problema y finalmente, después de hacer mucho I + D, llegué a saber que tienes que usar PullFilter en lugar de Pull cuando quieras eliminar usando filter.