Возникают проблемы с запросом документов по полям даты, расположенным во вложенных документах. - PullRequest
0 голосов
/ 29 августа 2018

MongoShell 3.6 +

У меня есть документ с несколькими вложенными документами, некоторые имена для этих документов не фиксированные, а динамические, поэтому следующий шаблон запроса "field1.field2.field3" может работать не для всех документов, поскольку я не знаю точного имени для field2: «field1.?.field3», поскольку они различны.

Я пробовал разные подходы безуспешно. Цель состоит в том, чтобы извлечь _id для всех вложенных документов, имеющих endDate старше 3 месяцев.

Любая помощь в этом очень ценится.

Внутри json, который я разместил ниже, я добавил '?' указывая на то, что дочерний документ заранее неизвестен.

Примечание : если я использую, например, accountBalances.Iusacell_Prepaid_UC.quotas.Iusacell_onetime_Quota.credits._PlIUsNnJEee6aJBYcxiwDQ.endDate *, к сожалению, это работает только для 1016 ** 1016, но, к сожалению, работает только для 1016 ** 1016, но, к сожалению, работает только для 1016 ** 1016, но, к сожалению, только для 1016 ** 1016 типы документов, и у меня буквально есть миллионы, которые я не знаю заранее.

{ 
"_id" : "xxxxxxxxxxxx", 
"accountBalances" : {
    "Iusacell_Prepaid_UC" : {             ?
        "quotas" : {
            "Iusacell_onetime_Quota" : {   ?
                "credits" : {
                    "_PlIUsNnJEee6aJBYcxiwDQ" : ? {
                        "startDate" : ISODate("2017-12-05T14:33:21.175+0000"), 
                        "debits" : {
                            "consolidated" : {
                                "creationDate" : ISODate("2017-12-05T14:46:25.123+0000"), 
                                "debitAmount" : "330190897.00000000000000000", 
                                "debitId" : "consolidated"
                            }
                        }, 
                        "endDate" : ISODate("2017-12-26T14:35:17.000+0000"), 
                        "creditId" : "_PlIUsNnJEee6aJBYcxiwDQ", 
                        "creditAmount" : "1073741824.00000000000000000", 
                        "started" : true
...