Очакваното поведение не само е напълно документирано но също така намирам твърдението ви за невярно. Върху стандартна проба, която отговаря на посочените от вас условия, резултатите ще бъдат както е показано. Но първо препратката към документацията:
След това изходът за обяснение на валидна заявка:
{
"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()
машината за заявки може да избира само един индекс наведнъж.
Съвременните версии трябва да докладват много специфичния ред заедно с грешката:
Така че „всички“ полета са задължителни и те „трябва да са“ точно съвпадение без използване на оператори за неравенство.
Ако няма да използвате „винаги“ другите полета като част от вашата заявка с условия за „точно съвпадение“, тогава не можете да формирате съставен индекс заедно с текстово търсене.