Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.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
C# 精确包含子集合上的匹配项_C#_Mongodb_Mongodb .net Driver_Norm - Fatal编程技术网

C# 精确包含子集合上的匹配项

C# 精确包含子集合上的匹配项,c#,mongodb,mongodb-.net-driver,norm,C#,Mongodb,Mongodb .net Driver,Norm,将mongodb与NoRM驱动程序一起使用,我有以下文档: { "_id" : ObjectId("0758030341b870c019591900"), "TmsId" : "EP000015560091", "RootId" : "1094362", "ConnectorId" : "SH000015560000", "SeasonId" : "7894681", "SeriesId" : "184298", "Titles" : [

将mongodb与NoRM驱动程序一起使用,我有以下文档:

{
    "_id" : ObjectId("0758030341b870c019591900"),
    "TmsId" : "EP000015560091",
    "RootId" : "1094362",
    "ConnectorId" : "SH000015560000",
    "SeasonId" : "7894681",
    "SeriesId" : "184298",
    "Titles" : [
            {
                    "Size" : 120,
                    "Type" : "full",
                    "Lang" : "en",
                    "Description" : "House"
            },
            {
                    "Size" : 10,
                    "Type" : "red",
                    "Lang" : "en",
                    "Description" : "House M.D."
            }
    ], yadda yadda yadda
我的疑问是:

var query = new Expando();
query["Titles.Description"] = Q.In(showNames);
var fuzzyMatches = db.GetCollection<Program>("program").Find(query).ToList();
var query=newexpando();
查询[“Titles.Description”]=Q.In(showNames);
var fuzzyMatches=db.GetCollection(“程序”).Find(query.ToList();
其中showNames是一个字符串[]包含类似{“House”、“Glee”、“30rock”}

我的结果包含模糊匹配。例如,术语“House”返回的每个节目的标题中都有House一词(就像它在做一个Contains)

我想要的是直火柴。所以,如果document.Titles包含“一个蓝色的大房子”,它不会返回匹配项。只有当Titles.Description包含“House”时,我才需要匹配。

在shell语法中:

db.mycollection.find({“Titles.Description”:“House”})

在shell语法中:

db.mycollection.find({“Titles.Description”:“House”})


我无法重现这个问题,可能是因为我们使用了不同版本的MongoDB和/或NoRM。然而,这里有一些步骤可以帮助您找到模糊结果的来源

  • 使用MongoDB shell启用评测:

    > db.setProfilingLevel(2)
    
  • 再次运行代码
  • 将分析级别设置回0
  • 查看已执行的查询:

    > db.system.profile.find()
    
  • 分析信息应如下所示:

    {
      "ts" : "Wed Dec 08 2010 09:13:13 GMT+0100",
      "info" : "query test.program ntoreturn:2147483647 reslen:175 nscanned:3  \nquery: { query: { Titles.Description: { $in: [ \"House\", \"Glee\", \"30 Rock\" ] } } }  nreturned:1 bytes:159",
      "millis" : 0
    }
    
    实际查询位于
    info
    属性中,应该是:

    { Titles.Description: { $in: [ "House", "Glee", "30 Rock" ] } }
    
    如果您的查询看起来不同,那么“问题”在NoRM驱动程序中。例如,如果NoRM将代码转换为以下regex查询,它将进行子字符串匹配:

    { Titles.Description: { $in: [ /House/, /Glee/, /30 Rock/ ] } }
    
    我自己也用过NoRM,但我还没有遇到一个可以控制它的设置。也许您使用的是另一个版本,它确实具有这样的功能


    如果您的查询与它应该使用的查询没有什么不同,请尝试从shell运行查询。如果结果仍然模糊,那么我们肯定在使用不同版本的MongoDB;)

    我无法重现这个问题,可能是因为我们使用了不同版本的MongoDB和/或NoRM。然而,这里有一些步骤可以帮助您找到模糊结果的来源

  • 使用MongoDB shell启用评测:

    > db.setProfilingLevel(2)
    
  • 再次运行代码
  • 将分析级别设置回0
  • 查看已执行的查询:

    > db.system.profile.find()
    
  • 分析信息应如下所示:

    {
      "ts" : "Wed Dec 08 2010 09:13:13 GMT+0100",
      "info" : "query test.program ntoreturn:2147483647 reslen:175 nscanned:3  \nquery: { query: { Titles.Description: { $in: [ \"House\", \"Glee\", \"30 Rock\" ] } } }  nreturned:1 bytes:159",
      "millis" : 0
    }
    
    实际查询位于
    info
    属性中,应该是:

    { Titles.Description: { $in: [ "House", "Glee", "30 Rock" ] } }
    
    如果您的查询看起来不同,那么“问题”在NoRM驱动程序中。例如,如果NoRM将代码转换为以下regex查询,它将进行子字符串匹配:

    { Titles.Description: { $in: [ /House/, /Glee/, /30 Rock/ ] } }
    
    我自己也用过NoRM,但我还没有遇到一个可以控制它的设置。也许您使用的是另一个版本,它确实具有这样的功能


    如果您的查询与它应该使用的查询没有什么不同,请尝试从shell运行查询。如果结果仍然模糊,那么我们肯定在使用不同版本的MongoDB;)

    非常确定我不能用NoRM传递原始shell查询。非常确定我不能用NoRM传递原始shell查询。