2017-08-17 1 views
0

I Aggregationsanfrage haben, sieht das wie folgt aus:MongoDB Art Sammlung von benutzerdefinierten Feld

aggregate.append([ 
      {$sort: paginateOptions.sort}, 
      {$match: paginateOptions.match}, 
      {$skip: (paginateOptions.page - 1) * paginateOptions.limit}, 
      {$limit: paginateOptions.limit}, 
      { 
       $lookup: { 
        from: 'users', 
        localField: 'owner', 
        foreignField: '_id', 
        as: 'owner' 
       } 
      }, 
      { 
       $unwind: { 
        path: '$owner', 
        preserveNullAndEmptyArrays: true 
       } 
      }, 
      { 
       $project: { 
        name: { 
         $concat: ["$firstname", " ", "$lastname"] 
        }, 
        email: 1, 
        owner: { 
         _id: 1, 
         username: 1 
        }, 
        last_note: { 
         $arrayElemAt: ["$notes", -1] 
        } 
       } 
      } 
     ]) 

ich von der letzten Note Zeitfeld (last_note.time) sortieren möchten. Das Problem ist, dass dieses Feld im Projektprozess erstellt wird, und wenn ich eine Sortierung nach dem Projekt hinzufügen, werde ich eine Sortierung nur für die Limit-Dokumente erhalten, nicht für die gesamte Sammlung (weil es nach dem Limit sein wird und überspringen ..)

Was kann ich tun?

Antwort

0

Sie sollten sortieren, bevor überspringen und Grenze:

`[ 
{$match: paginateOptions.match}, 
{$lookup: { 
       from: 'users', 
       localField: 'owner', 
       foreignField: '_id', 
       as: 'owner' 
      } 
     }, 
{$unwind: { 
       path: '$owner', 
       preserveNullAndEmptyArrays: true 
      } 
     }, 
{$project: { 
       name: { 
        $concat: ["$firstname", " ", "$lastname"] 
       }, 
       email: 1, 
       owner: { 
        _id: 1, 
        username: 1 
       }, 
       last_note: { 
        $arrayElemAt: ["$notes", -1] 
       } 
      } 
}, 
{$sort: paginateOptions.sort}, 
{$skip: (paginateOptions.page - 1) * paginateOptions.limit}, 
{$limit: paginateOptions.limit}, 
    ]` 
+0

auf diese Weise die Leistung der Abfrage schlecht sein wird. Die Sortierung sollte vor dem Projekt erfolgen, auch das Überspringen und Limit, wie von den mongodb-docs – user3712353