Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.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
MongoDB C#驱动程序,通过使用正则表达式的数组元素进行查询_C#_Mongodb_Linq - Fatal编程技术网

MongoDB C#驱动程序,通过使用正则表达式的数组元素进行查询

MongoDB C#驱动程序,通过使用正则表达式的数组元素进行查询,c#,mongodb,linq,C#,Mongodb,Linq,我正在使用MongoDB C#driver2.2版。我的集合包含“父”对象。每个父对象都有一个子对象数组。每个子项都有名称值: "parent": { "children":[ { "name": "Bob", "age": 10}, { "name": "Alice", "age": 7}, { "name": "Tobias", "age": 11} ] } 我需要将以下代码翻译成C#语句/LINQ语法: db.getColl

我正在使用MongoDB C#driver2.2版。我的集合包含“父”对象。每个父对象都有一个子对象数组。每个子项都有名称值:

"parent": {
    "children":[
        { "name": "Bob", "age": 10},
        { "name": "Alice", "age": 7},
        { "name": "Tobias", "age": 11}
    ]
}
我需要将以下代码翻译成C#语句/LINQ语法:

db.getCollection('Parents').find({'parent.children': { $elemMatch: { 'name': { $regex: '.*ob.*', $options: 'im' } }}})
我发现有这样的方法

var builder = Builders<BsonDocument>.Filter;
builder.Regex("parent.children.name", new BsonRegularExpression(".*ob.*")); //does not work with array
但我不明白如何将它们结合起来。请告知

更新:


我现在正在使用以下工具,如果您知道它不能正常工作的原因,请纠正我:

builder.AnyEq("parent.children.name", new BsonRegularExpression(".*ob.*"))
无法在此机器上测试C。如果这不起作用,请告诉我:

var filter = Builders<People>.Filter.ElemMatch(x => x.Parent.Children, x => Regex.IsMatch(x.Name, "regex"));
var res = await collection.Find(filter).ToListAsync();
var filter=Builders.filter.ElemMatch(x=>x.Parent.Children,x=>Regex.IsMatch(x.Name,“Regex”);
var res=await collection.Find(filter.ToListAsync();
顺便说一句,这里有一个你可能喜欢的技巧:

// Take your inputted `find` query string:
string bsonQuery = "{'parent.children': { $elemMatch: { 'name': { $regex: '.*ob.*', $options: 'im' } }}}";

// Use it as the filter!
var filter = MongoDB.Bson.Serialization.BsonSerializer.Deserialize<BsonDocument>(bsonQuery);

// Results:
var result = col.FindSync (filter).ToList();
//获取您输入的'find'查询字符串:
字符串bsonQuery=“{'parent.children':{$elemMatch:{'name':{$regex:'.*ob.*',$options:'im'}}”;
//使用它作为过滤器!
var filter=MongoDB.Bson.Serialization.BsonSerializer.Deserialize(bsonQuery);
//结果:
var result=col.FindSync(filter.ToList();
无法在此机器上测试C。如果这不起作用,请告诉我:

var filter = Builders<People>.Filter.ElemMatch(x => x.Parent.Children, x => Regex.IsMatch(x.Name, "regex"));
var res = await collection.Find(filter).ToListAsync();
var filter=Builders.filter.ElemMatch(x=>x.Parent.Children,x=>Regex.IsMatch(x.Name,“Regex”);
var res=await collection.Find(filter.ToListAsync();
顺便说一句,这里有一个你可能喜欢的技巧:

// Take your inputted `find` query string:
string bsonQuery = "{'parent.children': { $elemMatch: { 'name': { $regex: '.*ob.*', $options: 'im' } }}}";

// Use it as the filter!
var filter = MongoDB.Bson.Serialization.BsonSerializer.Deserialize<BsonDocument>(bsonQuery);

// Results:
var result = col.FindSync (filter).ToList();
//获取您输入的'find'查询字符串:
字符串bsonQuery=“{'parent.children':{$elemMatch:{'name':{$regex:'.*ob.*',$options:'im'}}”;
//使用它作为过滤器!
var filter=MongoDB.Bson.Serialization.BsonSerializer.Deserialize(bsonQuery);
//结果:
var result=col.FindSync(filter.ToList();

我现在正在使用以下内容:

builder.AnyEq("parent.children.name", new BsonRegularExpression(".*ob.*"))

我目前正在使用以下工具:

builder.AnyEq("parent.children.name", new BsonRegularExpression(".*ob.*"))

我已经在家里的数据库上测试了您当前的表达式(
builder.AnyEq(“parent.children.name”),新的BsonRegularExpression(“.*ob.”)
),我不相信它会以您想要的方式运行

,mongoDB支持数组字段上的正则表达式过滤器。我已经在C#中测试了下面的表达式,尽管该字段是数组,但对正则表达式的结果是正确的

builder.Regex(MONGO_FIELD_NAME, new BsonRegularExpression("SOME REGEX"));

此外,我在[online mongo webshell for query array]()中测试了玩具示例中的正则表达式。查询
db.inventory.find({tags:{$Regex:“^bl”}}
将返回“blank”或“blue”结果,尽管“tag”字段是数组。

我已经测试了当前表达式(
builder.AnyEq(“parent.children.name”),新的BsonRegularExpression(“.*ob.*”
),我不相信它会以您想要的方式运行

builder.Regex(MONGO_FIELD_NAME, new BsonRegularExpression("SOME REGEX"));
,mongoDB支持数组字段上的正则表达式过滤器。我已经在C#中测试了下面的表达式,尽管该字段是数组,但对正则表达式的结果是正确的

builder.Regex(MONGO_FIELD_NAME, new BsonRegularExpression("SOME REGEX"));

此外,我已经在[online mongo webshell for query array]()中的玩具示例上测试了正则表达式。查询
db.inventory.find({tags:{$Regex:“^bl”}}
将返回“blank”或“blue”结果,尽管“tag”字段是数组。

在您的示例中使用类(强类型).我只有一个“路径”的虚线符号。你能改进一下你的例子吗?@Antipod查找COPOs。当使用C#进行查询时,它们会让你的生活更轻松。谢谢你的更新。我几乎可以肯定提供的更新会起作用。问题是:它是一个字符串,我不想构造字符串,我们在驱动程序中有可以使用的方法,驱动程序将构造query毕竟,对我们来说,这是一个巨大的挑战:)说到POCOs,我100%同意你的看法,但我有一个要求——JSON没有定义的结构,它是动态的。虽然JSON是动态的,但你在C#中的第一类对象却不是。因此,在逐个使用的基础上编写COPO,即使数据可能发生变化,对于在其上运行的C#代码来说也是有意义的。谢谢你的意见。不幸的是,POCO在我的问题中是一个离题的问题,很抱歉:)顺便说一句,我已经更新了这个问题。在你的例子中,你使用类(强类型)。我所拥有的只是“路径”的虚线符号。你能改进一下你的例子吗?@Antipod查找COPOs。当使用C#进行查询时,它们会让你的生活更轻松。谢谢你的更新。我几乎可以肯定提供的更新会起作用。问题是:它是一个字符串,我不想构造字符串,我们在驱动程序中有可以使用的方法,驱动程序将构造query毕竟,对我们来说,这是一个巨大的挑战:)说到POCOs,我100%同意你的看法,但我有一个要求——JSON没有定义的结构,它是动态的。虽然JSON是动态的,但你在C#中的第一类对象却不是。因此,在逐个使用的基础上编写COPO,即使数据可能发生变化,对于在其上运行的C#代码来说也是有意义的。谢谢你的意见。不幸的是,POCO在我的问题中是一个离题的问题,很抱歉:)顺便说一句,我已经更新了这个问题。顺便说一句,你最后的问题在我看来很好!顺便说一句,我觉得你的最后一个问题很好!
builder.Regex(MONGO_FIELD_NAME, new BsonRegularExpression("SOME REGEX"));