簡體   English   中英

確切包含子集合中的匹配項

[英]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。 但是,這里有一些步驟可以幫助您找到模糊結果的來源。

  1. 使用MongoDB Shell打開配置文件:

     > db.setProfilingLevel(2) 
  2. 再次運行您的代碼。
  3. 將配置級別重新設置為0。
  4. 查看已執行的查詢:

     > 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM