将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();
其中showNames是一个字符串[]包含类似{“House”,“Glee”,“30 Rock”}
的内容我的结果包含模糊匹配。例如,术语“House”将返回每个节目的标题,其中包含单词House(就像它的包含一样)。
我想要的是直接比赛。因此,如果document.Titles包含“A big blue House”,则不会返回匹配项。只有当Titles.Description包含“House”时,我才会喜欢匹配。
答案 0 :(得分:2)
我无法重现这个问题,可能是因为我们使用的是不同版本的MongoDB和/或NoRM。但是,这里有一些步骤可以帮助您找到模糊结果的起源。
使用MongoDB shell开启分析:
> db.setProfilingLevel(2)
查看已执行的查询:
> 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将您的代码转换为以下正则表达式查询,它将执行子字符串匹配:
{ Titles.Description: { $in: [ /House/, /Glee/, /30 Rock/ ] } }
我自己使用过NoRM,但我没有遇到控制它的设置。也许你正在使用不同的版本,它确实带有这样的功能。
如果您的查询与应有的不同,请尝试从shell运行查询。如果它仍然出现模糊结果,那么我们肯定会使用不同版本的MongoDB;)
答案 1 :(得分:1)
:
db.mycollection.find({“Titles.Description”:“House”})