3

This is my document

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"
    }]
}

I need to delete one of 'Tags' by id in c#. for example: delete from post where tag.id = 2

Tolga Evcimen
  • 7,112
  • 11
  • 58
  • 91
CodeMan
  • 671
  • 6
  • 13
  • Possible duplicate of [How can I delete nested array element in a mongodb document with the c# driver](http://stackoverflow.com/questions/28585206/how-can-i-delete-nested-array-element-in-a-mongodb-document-with-the-c-sharp-dri) – Vishwas Dec 06 '15 at 11:43
  • it is not my answer ! it does not works in this version. I saw it before. – CodeMan Dec 06 '15 at 13:32

2 Answers2

4

MongoDB.Bson version : 2.0.1.27

MongoDB.Driver version :2.2.0.262

MongoDB.Driver.Code version :2.2.0.262

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);
Community
  • 1
  • 1
CodeMan
  • 671
  • 6
  • 13
0

I found the answer.

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);
shA.t
  • 16,580
  • 5
  • 54
  • 111
CodeMan
  • 671
  • 6
  • 13