2016-08-12 6 views
2

これは私のデータセットであり、より大きなjsonコードの一部です。私は、バリューチェーン内のすべてのフィールドに一致するクエリを記述したいと思います。全フィールド検索

データセット:

"value_chain" : { 
    "category" : "Source, Make & Deliver", 
    "hpe_level0" : "gift Chain Planning", 
    "hpe_level1" : "nodemand to Plan", 
    "hpe_level2" : "nodemand Planning", 
    "hpe_level3" : "nodemand Sensing" 
}, 

例:

誰かが "贈り物" を検索する場合、クエリはすべてのフィールドをスキャンする必要があり、一致がある場合は、文書を返します。

これは私が試したものですが、あなたが最初にすべてのテキストフィールドに$textインデックスを作成する必要があるようにそれがでインデックスフィールドの内容にテキスト検索を行っているためdidntの仕事

db.sw_api.find({ 
    value_chain: { $elemMatch: { "Source, Make & Deliver" } } 
}) 
+0

私は私の質問にいくつかの編集を加えました –

答えて

0

が鳴りますテキストインデックス:

db.sw_api.createIndex({ 
    "value_chain.category" : "text", 
    "value_chain.hpe_level0" : "text", 
    "value_chain.hpe_level1" : "text", 
    "value_chain.hpe_level2" : "text", 
    "value_chain.hpe_level3" : "text" 
}, { "name": "value_chain_text_idx"}); 

は、作成したインデックスは5列からなる複合インデックスで、あなたはそれを上書きしない場合はモンゴは、デフォルトで自動的にあなたのためのテキストの名前空間を作成します。

"you_db_name.sw_api.$value_chain.category_text_value_chain.hpe_level0_text_value_chain.hpe_level1_text_value_chain.hpe_level2_text_value_chain.hpe_level3_text" 

それ与える必要が故に:あなたが

db.sw_api.createIndex({ 
    "value_chain.category" : "text", 
    "value_chain.hpe_level0" : "text", 
    "value_chain.hpe_level1" : "text", 
    "value_chain.hpe_level2" : "text", 
    "value_chain.hpe_level3" : "text" 
}); 

としてインデックス名を指定しない場合は、テキストインデックスは次のようになりますので、上記では、潜在的なエラー"ns name is too long (127 byte max)"がありますmongoによって自動生成された場合、それほど長くはない名前。インデックスが作成されると

db.sw_api.getIndexes()クエリはインデックスが存在あなたが表示されます:

/* 1 */ 
[ 
    { 
     "v" : 1, 
     "key" : { 
      "_id" : 1 
     }, 
     "name" : "_id_", 
     "ns" : "dbname.sw_api" 
    }, 
    { 
     "v" : 1, 
     "key" : { 
      "_fts" : "text", 
      "_ftsx" : 1 
     }, 
     "name" : "value_chain_text_idx", 
     "ns" : "dbname.sw_api", 
     "weights" : { 
      "value_chain.category" : 1, 
      "value_chain.hpe_level0" : 1, 
      "value_chain.hpe_level1" : 1, 
      "value_chain.hpe_level2" : 1, 
      "value_chain.hpe_level3" : 1 
     }, 
     "default_language" : "english", 
     "language_override" : "language", 
     "textIndexVersion" : 3 
    } 
] 

あなたは、インデックスを作成すると、あなたはその後、$text検索を行うことができます。

db.sw_api.find({ "$text": { "$search": "gift" } })