2016-10-27 1 views
2

Ich habe einen Datensatz geholt, den ich vor dem Senden an Frontend sortieren möchte.Mongodb: Sortiere eine Liste nach Schlüssel und Wert

db.getCollection('users').find({$or: 
        [ 
         {createdBy: 'abhi'}, 
         {createdBy: {'$ne': 'abhi'}, visibility: 'public'} 
        ]}).sort({'createdBy': 1}) 

Ich möchte alle Datensätze für createdBy sortieren Benutzer abhi zuerst und dann die anderen Benutzer.

Etwas wie:

.sort({'createdBy == abhi': 1}) 
+0

Sie möchten alle Dokumente mit dem Benutzer 'abhi', zuerst, und andere Dokumente haben, um danach zu kommen, sortiert in alphabetischer Reihenfolge? – sergiuz

+0

@SergiuZaharie, auf diese Weise muss ich zwei Anrufe machen und dann die Aufzeichnungen concat. Kann dies nicht durch Angabe von Sortierung auf Schlüssel- und Wertbasis erfolgen? –

Antwort

1

können Sie erreichen, dass die Aggregation verwenden.

  1. eine neue Projektion der Felder Dokumente Stellen und eine temporäre Feld hinzufügen Markierung first: true wenn die createdByabhi sonst Ihre markierten Felder first: false
  2. Sortieren nach {first:-1, createdBy:1} zuerst
  3. (Re) in der sortierten Liste setzen projizieren Sie Ihre Felder die TEMP-Feld first

Code zu entfernen:

db.users.aggregate([ 
    {$project: 
     { 
      first: 
      { 
       $cond: { if: { "$eq": ["$createdBy", 'abhi' ]}, then: true, else: false } 
      }, 
      createdBy: '$createdBy' 
     } 
    }, 
    {$sort: {first:-1, "createdBy": 1}}, 
    {$project: 
     { 
      createdBy: 1 
      // Don't include first:1 
     }  
    } 
]) 
Verwandte Themen