У меня вопрос к ученым.
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
. Должен ли я просто индексировать это или есть лучшее решение? Возможно, мне придется переписать этот вопрос, если подумать ...