Запросите документ mongodb для объектов с повторяющимися идентификаторами во вложенном массиве

#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" }
 

Но время ожидания этого запроса истекло (у нас также нет никаких индексов в этом массиве). У кого-нибудь есть идея для лучшего запроса и способ добавления индексов, чтобы запрос не прерывался?