Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongo C#驱动程序-包含过滤器_C#_Mongodb_Mongodb .net Driver_Mongodb Csharp 2.0 - Fatal编程技术网

Mongo C#驱动程序-包含过滤器

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 C#驱动程序,它使用了大量异步和构建器模式。这很好。我正在尝试将SQLWHERE子句转换为Mongo FilterDefinition对象

知道如何处理“包含”吗?
比如:


首先,我强烈建议(从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" });