2017-06-28 22 views
0

我的數據是這樣的:MongoDB的數組排序的孩子一個文件

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

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

    ] 
}, 
... 

我想找回在朋友被高度降序排序的文件。我試過db.getCollection('users').find({"name" : "dan"}, {"friends" : 1}).sort({"friends.height" : -1}),但朋友列表保持不變。

編輯:我搞砸了我的數據的結構,我固定的陣列看起來像一個數組...

+1

這些是子文檔對象的「關鍵」。你不能對它們進行排序。如果你希望按「高度」排序,那麼他們需要自己在「數組」條目中。 –

+0

祝你好運!大多數語言實現不會「默認」擁有「排序的鍵」。例如JavaScript當然不是。這實際上是你選擇的結構不正確的標誌。命名鍵基本上是一個「螞蟻模式」。至少用MongoDB查詢肯定是不好的。 –

+0

我搞砸了結構,編輯... – McDermott

回答

1

一個選項是運行聚集:

  1. 解開陣列
  2. 各種各樣的friends.name
  3. 重新組合

管道應該是這個樣子:

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