Mongo C#驱动程序-包含过滤器
我使用的是最新版本的Mongo C#驱动程序,它使用了大量异步和构建器模式。这很好。我正在尝试将SQLWHERE子句转换为Mongo FilterDefinition对象 知道如何处理“包含”吗?Mongo C#驱动程序-包含过滤器,c#,mongodb,mongodb-.net-driver,mongodb-csharp-2.0,C#,Mongodb,Mongodb .net Driver,Mongodb Csharp 2.0,我使用的是最新版本的Mongo C#驱动程序,它使用了大量异步和构建器模式。这很好。我正在尝试将SQLWHERE子句转换为Mongo FilterDefinition对象 知道如何处理“包含”吗? 比如: 首先,我强烈建议(从Mongo本身)服用。它非常彻底,涵盖了你的问题(甚至更多) 其次,我假设在您的示例中,x是一个数组 MongoDB正确处理数组的多态性。如果您有一个带有标记数组的类Post,您可以在Tag=ABC的位置进行筛选 如果您使用的是C#linq方法,则看起来像.Find(p=>
比如:
首先,我强烈建议(从Mongo本身)服用。它非常彻底,涵盖了你的问题(甚至更多) 其次,我假设在您的示例中,
x
是一个数组
MongoDB正确处理数组的多态性。如果您有一个带有标记数组的类Post
,您可以在Tag=ABC
的位置进行筛选
如果您使用的是C#linq方法,则看起来像.Find(p=>p.Tags==“ABC”)
。如果您使用的是BsonDocument
,看起来像newbsondocument()。添加(“Tags”,“ABC”)
如果x
是一个字符串,您可以使用一个简单的正则表达式。对于2.0驱动程序,您可以手动创建过滤器定义
:
FilterDefinition<BsonDocument> filter = "{ x : { $regex : /ABC/ } }";
然后,您可以在查询中使用过滤器:
using (var cursor = await collection.Find(filter).ToCursorAsync())
{
// ...
}
我有另一种方式,我不喜欢,但它的工作。标记为正确的答案有一半是错的(匹配是构建者的一种方法)。在本例中,在类似sql查询的语句中,/的作用类似于%。我仍然在寻找一个更好的方法,如果我在下面找到一个更合适的方法,我会更新
List<yourobject> someList = await collection.Find("{ x: /Test/ }").ToListAsync();
var filter = Builders<yourobject>.Filter.Eq("x", "ABC");
List<yourobject> someList = await collection.Find(filter).ToListAsync();
List someList=wait collection.Find(“{x:/Test/}”).ToListAsync();
var filter=Builders.filter.Eq(“x”,“ABC”);
List-someList=wait-collection.Find(filter.toListSync();
为了在V2 API中实现这一点,请使用“Filter.Regex”:
var collection = db.GetCollection<BsonDocument>("collection");
var filter = Builders<BsonDocument>.Filter.Regex("fieldName", new BsonRegularExpression(".*fieldValue.*"));
var data = await (await coll.FindAsync<BsonDocument>(filter).ConfigureAwait(false)).ToListAsync();
//continue process data
var collection=db.GetCollection(“collection”);
var filter=Builders.filter.Regex(“fieldName”,新的BsonRegularExpression(“.*fieldValue.*)”);
var data=await(await coll.FindAsync(filter).ConfigureAwait(false)).ToListAsync();
//继续处理数据
我可以使用Filter.AnyIn这样做
var filter = Builders<BsonDocument>.Filter.AnyIn("x", new List<string> { "ABC" });
var filter=Builders.filter.AnyIn(“x”,新列表{“ABC”});
如果您也在寻找多个值,只需将它们添加到列表中即可。谢谢!我正在使用2.0版本的驱动程序,无法在筛选器生成器上找到.Matches(),但我可以找到.Regex(),因此我将尝试使用它。筛选器的生成器方法不正确。它不能等于,因为您正在查找包含项。
var collection = db.GetCollection<BsonDocument>("collection");
var filter = Builders<BsonDocument>.Filter.Regex("fieldName", new BsonRegularExpression(".*fieldValue.*"));
var data = await (await coll.FindAsync<BsonDocument>(filter).ConfigureAwait(false)).ToListAsync();
//continue process data
var filter = Builders<BsonDocument>.Filter.AnyIn("x", new List<string> { "ABC" });