#json #mongodb #indexing #nested
Вопрос:
Таким образом, у нас есть коллекция Mongodb с более чем 70 миллионами документов. Там было небольшое окно, в котором несколько объектов с повторяющимися идентификаторами хранились во вложенном массиве (в одном документе).
Наши документы выглядят более или менее так:
{
"_id" : ObjectId("....."),
"orderLineId" : UUID("some_uuid"),
"salesOrder" : {
"salesOrderCorrections" : [
{
"correctionId" : UUID("some_uuid"),
"correctionStatus" : "SUCCEEDED",
"correctionType" : "CANCELLATION",
"creationDateTime" : ISODate("2001-06-03T07:46:33.407 02:00"),
"lastModifiedDateTime" : ISODate("2001-06-03T07:46:33.407 02:00"),
"reason" : "cancelled by someId",
"salesOrderVersion" : 2
},
{
"correctionId" : UUID("some_uuid"),
"correctionStatus" : "SUCCEEDED",
"correctionType" : "CANCELLATION",
"creationDateTime" : ISODate("2001-06-03T07:46:33.407 02:00"),
"lastModifiedDateTime" : ISODate("2001-06-03T07:46:33.407 02:00"),
"reason" : "cancelled by someId",
"salesOrderVersion" : 2
}
]
}
}
Мы хотим найти документы, в которых есть один или несколько объектов в salesOrderCorrections
массиве, которые имеют то же correctionId
самое . Для запроса этих документов мы получаем следующий запрос:
"salesOrder.salesOrderCorrections.1.correctionId" : { $eq : "salesOrder.salesOrderCorrections.0.correctionId" }
Но время ожидания этого запроса истекло (у нас также нет никаких индексов в этом массиве). У кого-нибудь есть идея для лучшего запроса и способ добавления индексов, чтобы запрос не прерывался?