MongoDb 使用过滤器匹配列表
MongoDb use filter to match a list
我有一个列表 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);
Returns属性DeletedCount = 0
有人可以指出过滤器似乎有什么问题吗?
您必须像这样从 BsonDocument 中提取 _id:
var extractedIds = myIds.Select(x => x["_id"].ToString()).ToList();
之后您可以在过滤器中使用它。
list.DeleteMany(Builders<MessageExchange>.Filter.In("_id", extractedIds));
确保过滤器的 _id 部分匹配 MessageExchange class
另一种方法是将其设为强类型:
list.DeleteMany(Builders<MessageExchange>.Filter.In(x => x.Id, extractedIds));
这也有效(基于 Skami 的回答):
var filter = new BsonDocument("_id", new BsonDocument("$in", new BsonArray(extractedIds)));
list.DeleteMany(filter);
因此不绑定MessageExchange
class.
我有一个列表 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);
Returns属性DeletedCount = 0
有人可以指出过滤器似乎有什么问题吗?
您必须像这样从 BsonDocument 中提取 _id:
var extractedIds = myIds.Select(x => x["_id"].ToString()).ToList();
之后您可以在过滤器中使用它。
list.DeleteMany(Builders<MessageExchange>.Filter.In("_id", extractedIds));
确保过滤器的 _id 部分匹配 MessageExchange class
另一种方法是将其设为强类型:
list.DeleteMany(Builders<MessageExchange>.Filter.In(x => x.Id, extractedIds));
这也有效(基于 Skami 的回答):
var filter = new BsonDocument("_id", new BsonDocument("$in", new BsonArray(extractedIds)));
list.DeleteMany(filter);
因此不绑定MessageExchange
class.