期待される動作は、完全に文書化されている だけではありません。 しかし、私はあなたの主張が間違っていることもわかりました。指定した条件を満たすことができる標準サンプルでは、結果は次のようになります。ただし、最初にドキュメントリファレンス:
次に、有効なクエリの出力を説明します:
{
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "test.mycollection",
"indexFilterSet" : false,
"parsedQuery" : {
"$and" : [
{
"cid" : {
"$eq" : 2
}
},
{
"uid" : {
"$eq" : 1
}
},
{
"$text" : {
"$search" : "cat",
"$language" : ""
}
}
]
},
"winningPlan" : {
"stage" : "TEXT",
"indexPrefix" : {
"uid" : 1,
"cid" : 2
},
"indexName" : "uid_1_cid_1_content_text",
"parsedTextQuery" : {
}
},
"rejectedPlans" : [ ]
},
"serverInfo" : {
"host" : "trashbox",
"port" : 27017,
"version" : "3.0.0",
"gitVersion" : "a841fd6394365954886924a35076691b4d149168"
},
"ok" : 1
}
したがって、実際に作成した「複合キー」とは異なるパターンを持ち、明確に指定されたルールを満たすクエリを発行する場合は、要点にも注意を払う必要があります。
したがって、「任意の形式」の複合語などで、MongoDBテキストインデックスの複数の定義を探している場合は、それを行うことはできません。同じことが「地理空間」インデックスにも当てはまります。また、 $or
式、または .sort()
クエリエンジンは一度に1つのインデックスしか選択できません。
最新バージョンでは、エラーとともに非常に具体的な行を報告する必要があります:
したがって、「すべて」のフィールドが必須であり、不等式演算子を使用せずに完全に一致する必要があります。
「完全一致」条件でクエリの一部として他のフィールドを「常に」使用しない場合は、テキスト検索と一緒に複合インデックスを作成することはできません。