Question Mongodb trie le tableau interne


J'ai cherché depuis un moment maintenant et ne semble pas pouvoir trier un tableau interne et le conserver dans le document avec lequel je travaille actuellement.

{
    "service": {
        "apps": {
            "updates": [
              {
                "n" : 1
                "date": ISODate("2012-03-10T16:15:00Z")
              },
              {
                "n" : 2
                "date": ISODate("2012-01-10T16:15:00Z")
              },
              {
                "n" : 5
                "date": ISODate("2012-07-10T16:15:00Z")
              }
            ]
        }
     }
 }

Je souhaite donc que l'élément soit renvoyé en tant que service, mais que mon tableau de mises à jour soit trié. Jusqu'ici avec la coquille j'ai:

db.servers.aggregate(
        {$unwind:'$service'},
        {$project:{'service.apps':1}},
        {$unwind:'$service.apps'}, 
        {$project: {'service.apps.updates':1}}, 
        {$sort:{'service.apps.updates.date':1}});

Quelqu'un pense-t-il pouvoir aider à ce sujet?


14
2018-03-13 14:28


origine


Réponses:


Vous pouvez le faire en $unwindle updates tableau, triant les documents résultants par date, et alors $grouples rassembler sur _id en utilisant l'ordre trié.

db.servers.aggregate(
    {$unwind: '$service.apps.updates'}, 
    {$sort: {'service.apps.updates.date': 1}}, 
    {$group: {_id: '$_id', 'updates': {$push: '$service.apps.updates'}}}, 
    {$project: {'service.apps.updates': '$updates'}})

31
2018-03-13 15:09