2017-03-01 74 views
2

我有一個像「America」的搜索文本。我有以下蒙戈文件:MongoDB如何通過搜索混合模式字段來查找文檔?

[ 
{ 
    "name": "Car Loan", 
    "details": [ 
    { 
     "Bank": "America First", 
     "Location": "USA" 
    } 
} 
] 

我用貓鼬,我可以用這個找到一個單一的模式,如 「名」:

.find({ 「名」:{ 「$正則表達式」: req.query.searchText,「$ options」:「i」}})

有沒有類似的方式來搜索像「細節」混合模式內的文本?

回答

4

您可以使用$or指定的所有字段:

db.text.find({ 
    $or: [ 
     { "details.Bank": { "$regex": "America", "$options": "i" } }, 
     { "details.Location": { "$regex": "America", "$options": "i" } } 
    ] 
}) 

或者你可以使用text search功能與內置的不區分大小寫功能,您必須對您的陣列字段項創建text indexes

db.text.createIndex({ 
    "details.Bank": "text", 
    "details.Location": "text" 
}) 

並使用$text$search查找:

db.text.find({ 
    $text: { 
     $search: "usa" 
    } 
}) 
+0

謝謝,我使用了創建索引的第二種解決方案的修改,並解決了我的查詢。 – swapp1990

+0

我還有一個與此有關的問題,我不知道你是否可以幫助我。上面的'createIndex'函數確實爲我提供了搜索文本的結果,例如'America First'或'USA'等值。如果我還想將「銀行」和「位置」這樣的密鑰包含到我的索引中,然後用它來查找文檔,該怎麼辦?有可能嗎? – swapp1990

+0

你的意思是你只想通過銀行搜索或者只搜索位置(在'details'內)? –

相關問題