Индексировать и запрашивать элементы в массиве с запросом манго для cloudant и couchdb 2.0
У меня есть следующая структура БД:
{"_id": "0096874","genre": ["Adventure","Comedy", "Sci-Fi" ]}
{"_id": "0099088","genre": ["Comedy", "Sci-Fi", "Western"]}
и хотел бы запросить его, как я мог бы сделать в Mongodb
db.movies.find({genre: {$in: ["Comedy"]}})
Это работает, когда я использую текстовый индекс для всей базы данных, но это кажется очень расточительным:
// index
{
"index": {},
"type": "text"
}
//query
{
"selector": {
"genre": {
"$in": ["Comedy"]
}
},
"fields": [
"_id",
"genre"
]
}
Следующий индекс не работает:
{
"index": {
"fields": [
"genre"
]
},
"type": "json"
}
Каков правильный индекс для облачного запроса, который не индексирует всю базу данных? Спасибо за вашу помощь
1 ответ
У тебя было почти правильно. Ваш индекс верен, но вам нужно добавить селектор, чтобы получить все идентификаторы https://cloudant.com/blog/mango-json-vs-text-indexes/.
Это не очень хорошее решение с точки зрения производительности, как говорит Тони,
Причина, по которой это работает, опять же заключается в том, что Mango выполняет указанный выше $ в качестве механизма фильтрации всех документов. Как мы видели в заключении предыдущего раздела о синтаксисе JSON, компромисс производительности с запросом выше заключается в том, что он, по сути, выполняет полное сканирование индекса, а затем применяет фильтр.
{
"selector": {
"_id": {
"$gt": null
},
"genre": {
"$in": ["Western"]
}
},
"fields": [
"_id",
"genre"
],
"sort": [
{
"_id": "asc"
}
]
}