Реализация индекса, который улучшит запрос в mongoDB - PullRequest
0 голосов
/ 17 марта 2020

В настоящее время я пытаюсь реализовать индекс для моего запроса. Вот оригинальный запрос:

*db.getCollection('products').aggregate([
    { $unwind: "$categories" },
    {  $unwind: "$categories"},
    {$group: {"_id": "$_id","title": {$first:"$title"},
            "asin":{$first:"$asin"},
            "categories": { $push: "$categories" }} },
    { $match: { "categories": { $in: ['T-Shirts']}} },
    { "$project":{ "_id": 0, "asin":1, "title":1  }  } ])*

Это мой текущий код для моего индекса:

*var cursor = 
db.products.explain("allPlansExecution").find(categories:{"T-Shirts"},{ categories:1, title:1, asin:1, _id:0,})
while (cursor.hasNext()) {
    print(cursor.next());
}*

Когда я запускаю индексный код, я должен получить nReturned как 8 в настоящее время на 0.

Может кто-нибудь подсказать мне, как это сделать? Или кто-то может сказать мне, что они добавят?

1 Ответ

0 голосов
/ 17 марта 2020

Не существует простого способа индексации отдельных значений в массиве, содержащемся в другом массиве.

В этом случае, поскольку рассматриваемые значения являются строковыми, вы можете использовать текстовый индекс, например:

db.products.createIndex({"$**":"text"})

Затем можно использовать оператор запроса $text для поиска в индексе точного соответствия:

db.products.find({$text:{$search:"\"T-Shirts\""}},{_id:0, asin:1, title:1})
...