2017-03-01 22 views
2

「アメリカ」のような検索テキストがあります。MongoDB混合スキーマフィールドを検索して文書を見つける方法は?

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

私はマングースを使用して、私はこれを使用して、 "名前" のような単一のスキーマを見つけることができます:

.find({ "名前":{ "$の正規表現":私はMongoのドキュメントを以下していますreq.query.searchText、 "$ options": "i"}})

「詳細」のような混合スキーマ内のテキストを検索する同様の方法はありますか?

答えて

4

あなたはすべてのフィールドを指定$orを使用することができます:あなたは、組み込みのケース非感受性機能でtext search機能を使用することができます

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

それとも、あなたの配列フィールド項目にtext indexesを作成する必要があります。

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

と表示し、$text$searchと見つける:

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

ありがとう、私はインデックスを作成する2番目の解決策の変更を使用し、それは私のクエリを解決しました。 – swapp1990

+0

私はこれに関連して別の質問をしました。あなたが私を助けてくれるかどうかは分かりません。上記の 'createIndex'関数は、 'America First'や 'USA'のような値の検索テキストの検索結果を返します。インデックスに「銀行」や「ロケーション」のようなキーを入れて、それを使ってドキュメントを探したいとしたらどうでしょうか?それは可能ですか? – swapp1990

+0

銀行だけで検索するか、場所で検索するだけですか(詳細は「内部」)? –

関連する問題