I'm trying to remove a single embedded document, I'm selecting and deleting like this
var collection = _database.GetCollection<BsonDocument>("MyCollection");
var builder = Builders<BsonDocument>.Filter;
var filter = builder.Eq("Name", varName)
& builder.Eq("Thing01", varThing01);
& builder.Eq("myembededarray.from", dateFrom)
& builder.Eq("myembededarray.to", dateTo);
var result = collection.DeleteOneAsync(filter).Result;
but it's selecting and the deleting the entire record, not just the embedded document.
If I was not using the C# driver It looks like I could delete an embedded record by using the $pull operator, with something like
db.MyCollection.update( { Name: VarName }, { $pull: { myembededarray.from : { $eq: dateFrom },myembededarray.to : { $eq: dateTo } } } )
But I cant figure it out...
How do I use the $pull operator like this with c# ?
Solution was :
var collection = _database.GetCollection<BsonDocument>("MyCollection");
var builder = Builders<BsonDocument>.Filter;
//find the specific root document
var filter = builder.Eq("Name", varName)
& builder.Eq("Thing01", varThing01);
//create a PullFilter to update the embedded document array
var update = Builders<BsonDocument>.Update.PullFilter("myembededarray",
Builders<BsonDocument>.Filter.Eq("from", dateFrom)
&Builders<BsonDocument>.Filter.Eq("to", dateTo));
//make an update (counter intuitively not a delete)
var result = collection.FindOneAndUpdateAsync(filter, update).Result;