如何使用c#驱动程序从Mongodb集合中删除特定的嵌入文档

时间:2016-03-26 02:23:11

标签: c# mongodb

我试图删除单个嵌入式文档,我这样选择和删除

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;

但它选择并删除整个记录,而不仅仅是嵌入文档。

如果我没有使用C#驱动程序看起来我可以使用$ pull运算符删除嵌入式记录,类似

db.MyCollection.update( { Name: VarName }, { $pull: { myembededarray.from : { $eq: dateFrom },myembededarray.to : { $eq: dateTo } } } )

但我无法弄明白......

如何使用c#这样的$ pull运算符?

解决方案是:

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;

0 个答案:

没有答案