Стратегия индекса MongoDB для BSON `_id` vs String` id`? - PullRequest
0 голосов
/ 09 ноября 2018

У меня вопрос к ученым.

2018-11-09T19:01:39.896+0100 [conn1851] query database.collection 
  query: { 
    $query: { 
      id: "5bb79a18293609212200cbe2" 
    }, 
    $orderby: { 
      _id: 1 
    } 
  } 
planSummary: IXSCAN { _id: 1 } 
ntoskip:0 
nscanned:138476 
nscannedObjects:138476 
keyUpdates:0 
numYields:0 
locks(micros) 
r:127627 
nreturned:1 
reslen:497 
127ms

Для меня это выглядит так, потому что я не запрашиваю _id с BSON, тогда индекс не используется должным образом. Действительно ли мне нужно создавать дополнительные индексы для запросов к базе данных по строковому значению _id, а именно id, или это просто несоответствие типов или что-то в этом роде?

Это текущие индексы, которые у меня есть

> db.collection.getIndexes()
[
    {
        "v" : 1,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "database.collection"
    },
    {
        "v" : 1,
        "key" : {
            "sport_id" : 1
        },
        "name" : "sport_id_1",
        "ns" : "database.collection"
    },
    {
        "v" : 1,
        "key" : {
            "sport_id" : 1,
            "updated_at" : -1
        },
        "name" : "sport_id_1_updated_at_-1",
        "ns" : "database.collection"
    },
    {
        "v" : 1,
        "key" : {
            "external_ids.id" : 1
        },
        "name" : "external_ids.id_1",
        "ns" : "database.collection"
    }
]

В настоящее время я нахожусь на mongodb 2.6.12 и использую mongoid v 2.5, я думаю.

Это часть того, как выглядит документ:

{ 
  "_id" : ObjectId("593a61de2936093a460004ca"), 
  "sport_id" : ObjectId("592eefe3293609345c000867")
  "id" : "593a61de2936093a460004ca", 
  "created_at" : ISODate("2017-06-09T08:52:46Z") 
}

Похоже, что все наши документы также сохраняют строковое представление _id. Это просто ужасно неправильно смоделировано, да?

Я не создавал этот беспорядок, но мне придется его исправить. Любые предложения, как исходить из этого? Похоже, мы по неизвестным причинам дублируем _id в id. Должен ли я просто индексировать это или есть лучшее решение? Возможно, мне придется переписать этот вопрос, если подумать ...

...