[英]Exact Contains Match on a Sub Collection
將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”一詞會返回每個帶有Title標題且其中帶有House字樣的節目(就像在執行Contains一樣)。
我想要的是直接比賽。 因此,如果document.Titles包含“藍色大房子”,則不會返回匹配項。 只有Titles.Description包含“房屋”時,我才需要匹配。
我一直無法重現該問題,可能是因為我們使用的是不同版本的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,但是我沒有遇到控制它的設置。 也許您使用的是其他版本,但確實提供了此類功能。
如果您的查詢與應該的查詢沒有不同,請嘗試從外殼程序運行查詢。 如果仍然得出模糊的結果,那么我們肯定會使用不同版本的MongoDB;)
在shell語法中:
db.mycollection.find({“ Titles.Description”:“ House”})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.