2013-07-16 2 views
0

L'un des nombreux documents dans ma collection est comme ci-dessous:date maximale à partir de plusieurs documents intégrés

{ "_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") 
      } 
     ] 
} 

Je veux trouver la date maximale pour le document entier (a, b, c). La solution que j'ai en ce moment, je boucle à travers tous les racine _id puis faire $match dans un cadre d'agrégation pour chaque a, b, c pour chaque document racine. cela semble très inefficace, de meilleures idées?

+0

vous voulez dire le maximum de toutes les dates en a, b et c? – innoSPG

+0

Si les clés comme a, b, c ne sont pas connues à l'avance, vous devrez essayer une réduction de la carte. Avez-vous essayé cela? – WiredPrairie

+0

@innoSPG oui .......... – PUG

Répondre

0

Votre question est très similaire à this question. Vérifiez-le. Comme avec cette solution, votre problème peut être traité avec le cadre d'agrégation de MongoDB, en utilisant les opérateurs $project et $cond pour aplatir à plusieurs reprises vos documents tout en conservant une valeur maximale à chaque étape.

Questions connexes