2013-07-16 6 views
0

Один из многих документов, в моей коллекции, как показано ниже:Найти максимальную дату от нескольких вложенных документов

{ "_id" :123, 
    "a" :[ 
      { "_id" : 1, 
       "dt" : ISODate("2013-06-10T19:38:42Z") 
      }, 
      { "_id" : 2, 
       "dt" : ISODate("2013-02-10T19:38:42Z") 
      } 
     ], 
    "b" :[ 
      { "_id" : 1, 
       "dt" : ISODate("2013-02-10T19:38:42Z") 
      }, 
      { "_id" : 2, 
       "dt" : ISODate("2013-23-10T19:38:42Z") 
      } 
     ], 
    "c" :[ 
      { "_id" : 1, 
       "dt" : ISODate("2013-03-10T19:38:42Z") 
      }, 
      { "_id" : 2, 
       "dt" : ISODate("2013-13-10T19:38:42Z") 
      } 
     ] 
} 

Я хочу, чтобы найти максимальную дату документа в целом (а, б, в). Решение, которое я имею прямо сейчас, я прокручиваю весь корень _id, затем делаю $match в структуре агрегации для каждого a, b, c для каждого корневого документа. это звучит очень неэффективно, какие-то лучшие идеи?

+0

Вы имеете в виду максимум всех дат в a, b и c? – innoSPG

+0

Если ключи, подобные a, b, c, не известны заранее, вам нужно попробовать уменьшить карту. Вы пробовали это? – WiredPrairie

+0

@innoSPG да .......... – PUG

ответ

0

Ваш вопрос очень похож на this question. Проверьте это.

Как и в случае с этим решением, ваша проблема может быть обработана с помощью агрегационной структуры MongoDB, используя операторы $project и $cond, чтобы неоднократно сгладить ваши документы, сохраняя при этом максимальное значение на каждом шаге.

Смежные вопросы