2017-06-28 3 views
0

Meine Daten wie folgt aussieht Sortierung:mongodb Kinder eines Arrays in einem Dokument

{ 
    "name":"dan", 
    "somestring":"asdf", 
    "friends":[ 

      { 
       "name": "carl", 
       "height":180, 
       ... 
      }, 
      { 
       "name": "john", 
       "height":165, 
       ... 
      }, 
      { 
       "name": "jim", 
       "height":170, 
       ... 
      } 

    ] 
}, 
... 

würde ich das Dokument wie abrufen, wo die Freunde sind wie folgt sortiert Höhe absteigen.

Ich versuchte db.getCollection('users').find({"name" : "dan"}, {"friends" : 1}).sort({"friends.height" : -1}), aber die Freundesliste bleibt gleich.

EDIT: Ich habe die Struktur meiner Daten vermasselte, fixierte ich das Array wie ein Array suchen ...

+1

Dies sind "Schlüssel" eines Unterdokuments. Sie können sie nicht sortieren. Wenn Sie nach "Höhe" sortieren möchten, müssen sie selbst in "Array" -Einträgen stehen. –

+0

Viel Glück damit! Die meisten Sprachimplementierungen haben "standardmäßig" keine "sortierten Schlüssel". JavaScript ist sicherlich nicht zum Beispiel. Es ist wirklich ein Zeichen, dass Ihre gewählte Struktur nicht korrekt ist. Benannte Schlüssel sind grundsätzlich ein "Ameisenmuster". Es ist sicherlich schlecht für die Abfrage mit mindestens MongoDB. –

+0

Ich vermasselte die Struktur, Bearbeitung ... – McDermott

Antwort

1

Eine Option ist eine Aggregation, die auszuführen:

  1. abwickelt das Array
  2. Sorten von friends.name
  3. umgruppiert

Die Pipeline wie folgt aussehen sollte:

db.collection.aggregate([ 
    { $match: { name: 'dan' }}, 
    { $unwind: '$friends' }, 
    { $sort: { 'friends.height': -1 }}, 
    { $group: { _id: '$name', friends: { $push: '$friends'}}]) 
Verwandte Themen