MongoDb использует фильтр, чтобы соответствовать списку - PullRequest
1 голос
/ 29 марта 2019

У меня есть список BsonDocument:

   var list = db.GetCollection<BsonDocument>(collectionName); 
   var myIds = list.Find(_ => true)
    .Project(Builders<BsonDocument>.Projection.Include("_id"))
    .ToList();

содержит:

myIds = "{ 
{ "_id" : "cc9d9282-c9d2-4cba-a776-ffddsds274d5" },  
{ "_id" : "2c1ddd82-c9d2-4dda-afr6-d79ff1274d56" },  
{ "_id" : "ss969281-c9d2-4cba-a776-d79ffds274d5" }  
}"

И хотите запросить вот так:

var deleted =list.DeleteMany(Builders<MessageExchange>.Filter.In("_id", myIds));

Я также попробовал следующее:

var filter = new BsonDocument("_id", new BsonDocument("$in", new BsonArray(myIds)));
var deleted = list.DeleteMany(filter);

Возвращает атрибут DeletedCount = 0 Может ли кто-нибудь указать, что в фильтре не так?

Ответы [ 2 ]

3 голосов
/ 01 апреля 2019

Вам нужно будет извлечь _id из BsonDocument следующим образом:

var extractedIds = myIds.Select(x => x["_id"].ToString()).ToList();

После чего вы можете использовать его в фильтре.

list.DeleteMany(Builders<MessageExchange>.Filter.In("_id", extractedIds));

Убедитесь, что часть фильтра _id совпадает с частью класса MessageExchange

Еще один способ сделать это, набрав его строго:

list.DeleteMany(Builders<MessageExchange>.Filter.In(x => x.Id, extractedIds));
0 голосов
/ 01 апреля 2019

Это также работает (основываясь на ответе Сками):

var filter = new BsonDocument("_id", new BsonDocument("$in", new BsonArray(extractedIds)));
list.DeleteMany(filter);

, поэтому не привязано к классу MessageExchange.

...