В моей базе данных Azure Cosmos DB есть следующие документы:
{
"id": "token",
"User": {
"UserToken": "token",
"Email": "test@email.com"
},
"_ts": 1541493290
}
Когда я запускаю следующий запрос:
SELECT * FROM root
WHERE ((root["User"]["UserToken"] = "token")
OR CONTAINS(root["User"]["Email"], "token"))
ORDER BY root["_ts"] DESC
Ничего не возвращается. Но когда я это немного изменю. Например, путем преобразования Email
в email
:
SELECT * FROM root
WHERE ((root["User"]["UserToken"] = "token")
OR CONTAINS(root["User"]["email"], "token"))
ORDER BY root["_ts"] DESC
Результат найден. Более того, когда я удаляю предложение ORDER BY
, запрос также возвращает мне результат. Таким образом, запрос похож на следующий
SELECT * FROM root
WHERE ((root["User"]["UserToken"] = "token")
OR CONTAINS(root["User"]["Email"], "token"))
Более того, когда я редактирую документ (например, открываю его, добавляю пустую строку и сохраняю), на заднем плане происходит какое-то волшебство, и документ обнаруживается. Для довольно «новых» документов (менее 1-3 месяцев) я могу искать их без своего «волшебного» трюка.
Определение индексов:
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*",
"indexes": [
{
"kind": "Range",
"dataType": "Number",
"precision": -1
},
{
"kind": "Hash",
"dataType": "String",
"precision": 3
}
]
}
],
"excludedPaths": []
}
Что я сделал не так?
ОБНОВЛЕНИЕ ответ не является полным объяснением, но очень помогает. Полное объяснение в моем блоге (https://stapp.space/ridiculous-bug-in-azure-cosmos-db/)