У меня есть индекс мультиключа для поля массива для коллекции. Когда я запрашиваю коллекцию с помощью $ elemMatch для поля, запрос выполняется очень медленно, несмотря на индекс.
Итак, я сделал и объяснил, и границы индекса кажутся неправильными.
У меня есть версия mongoDB 3.2.11
Вот структура документа коллекции:
{
"_id" : ObjectId("5c3b2def2157ed8004f6df42"),
...
"optins" : [
{
"active" : true,
"campaign" : "campaign-partenaires",
"register_date" : ISODate("2014-07-29T08:39:14.000Z")
},
{
"active" : false,
"campaign" : "campaign-top-20",
"register_date" : ISODate("2014-07-29T08:39:14.000Z"),
"unregister_date" : ISODate("2018-03-01T09:37:58.000Z"),
},
...
]
}
Определение индекса:
createIndex(
{
'optins.campaign':1,
'optins.active':1,
'optins.register_date':1,
'optins.unregister_date':1
},
{
background:true,
sparse:false
}
)
Запрос:
db.getCollection('lead').find(
{
optins : {
$elemMatch : {
campaign: "campaign-partenaires",
active : true,
register_date : {
$gt: ISODate("2014-07-29T08:39:14.000Z"),
$lt: ISODate("2019-07-29T08:39:14.000Z")
}
}
}
})
Этап ввода выигрышного плана объяснения:
{
"stage" : "IXSCAN",
"keyPattern" : {
"optins.campaign" : 1.0,
"optins.active" : 1.0,
"optins.register_date" : 1.0,
"optins.unregister_date" : 1.0
},
"indexName" : "optins.campaign_1_optins.active_1_optins.register_date_1_optins.unregister_date_1",
"isMultiKey" : true,
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 1,
"direction" : "forward",
"indexBounds" : {
"optins.campaign" : [
"[\"campaign-partenaires\", \"campaign-partenaires\"]"
],
"optins.active" : [
"[true, true]"
],
"optins.register_date" : [
"(true, new Date(1564389554000))"
],
"optins.unregister_date" : [
"[MinKey, MaxKey]"
]
}
}
Так что я не понимаю, почему границы для unregister_date равны
(true, new Date(1564389554000))
, где Дата (1564389554000) - это ISODate («2019-07-29T08: 39: 14.000Z»)
Но я думаю, что это должно быть
[ISODate("2014-07-29T08:39:14.000Z",ISODate("2019-07-29T08:39:14.000Z")]
Любая помощь, пожалуйста?