C# 按id从mongodb 2.4版的子文档中删除

C# 按id从mongodb 2.4版的子文档中删除,c#,mongodb,nested,C#,Mongodb,Nested,这是我的文件 Post{ "_id" : 1, "Code" : CSUUID("ba22a2a3-e6b5-4ce6-a3ad-20e5196cca46"), "Zip" : 123456, "Text" : "Hello", "Tags" : [{ "_id" : 1, "Tag" : "Tag8" }, { "_id" : 2, "Tag" : "Tag9" }, { "_id" : 3,

这是我的文件

Post{
  "_id" : 1,
  "Code" : CSUUID("ba22a2a3-e6b5-4ce6-a3ad-20e5196cca46"),
  "Zip" : 123456,
  "Text" : "Hello",
  "Tags" : [{
      "_id" : 1,
      "Tag" : "Tag8"
    }, {
      "_id" : 2,
      "Tag" : "Tag9"
    }, {
      "_id" : 3,
      "Tag" : "Tag10"
    }]
}
我需要在c#中按id删除其中一个“标记”。 例如:
delete from post where tag.id=2

我找到了答案

var pull = Update<Post>.Pull(x => x.Tags, builder => builder.EQ(q => q.Id, 2)).ToBsonDocument();
var filter1 = Builders<Post>.Filter.And(Builders<Post>.Filter.Eq(a => a.Id, 1),
              Builders<Post>.Filter.ElemMatch(q => q.Tags, t => t.Id == 2));
collection.UpdateOneAsync(filter1, pull);
var pull=Update.pull(x=>x.Tags,builder=>builder.EQ(q=>q.Id,2)).ToBsonDocument();
var filter1=Builders.Filter.And(Builders.Filter.Eq(a=>a.Id,1),
Builders.Filter.ElemMatch(q=>q.Tags,t=>t.Id==2);
collection.UpdateOneAsync(filter1,pull);
Bson版本:2.0.1.27

MongoDB.Driver版本:2.2.0.262

MongoDB.Driver.Code版本:2.2.0.262

const int id=1;
var pull=Builders.Update.PullFilter(x=>x.Tags,a=>a.Id==Id);
var filter1=Builders.Filter.And(Builders.Filter.Eq(a=>a.Id,1),Builders.Filter.ElemMatch(q=>q.Tags,t=>t.Id==Id));
collection.UpdateOneAsync(filter1,pull);

可能的重复不是我的答案!它在此版本中不起作用。我以前看过。我想你可以找到比更新更好的方法,但我不是这方面的专家。
const int id = 1;
var pull = Builders<Post>.Update.PullFilter(x => x.Tags, a => a.Id == id);
var filter1 = Builders<Post>.Filter.And(Builders<Post>.Filter.Eq(a => a.Id, 1), Builders<Post>.Filter.ElemMatch(q => q.Tags, t => t.Id == id));
collection.UpdateOneAsync(filter1, pull);