2012-12-14 114 views
0

有沒有一種方法在MongoDB的基礎上排序$elemMatch?例如,我有一個看起來像這樣的文件:排序在MongoDB由elemMatch

{ 
    'user': ObjectId('fsdfsdf'), 
    ... 
    'array_of_things': [ 
     { 
      'attribute_1': ObjectId('sdfsdfsd'), 
      'attribute_2': ObjectId('sdfsfsdf'), 
      'value': 30000 
     }, 
     { 
      'attribute_1': ObjectId('dfdfgfdg'), 
      'attribute_2': ObjectId('gdfgdfgd'), 
      'value': 100 
     }, 
     { 
      'attribute_1': ObjectId('mbnmbbmb'), 
      'attribute_2': ObjectId('mbnmbnmb'), 
      'value': 2000 
     }, 
     ... 
    ] 
} 

我需要能夠查詢基於array_of_things領域內一個匹配的元素(這是很簡單的用$elemMatch)這些數據。問題出現了,因爲我還需要能夠按照與某個屬性匹配的值(升序或降序)進行排序。例如,查詢可能是:

{ 
    'user': ObjectId('fsdfsdf'), 
    'array_of_things': { 
     $elemMatch: { 
      'attribute_1': ObjectId('dfdfgfdg'), 
      'value': { 
       $gt: 1 
      } 
     } 
    } 
} 

單靠value(如sort({ 'array_of_things.value': -1 })預見的只有各種排序的所有值的任何數組元素,不匹配attribute_1第一

有沒有辦法做到這一點?

道歉,如果這是一個已經問到的問題,但我似乎無法照看找到任何解決的辦法。

+2

我相信你希望通過$ unwind得到這個結果,並且使用匯總框架挑選的值域上的$ sort,我認爲 – Sammaye

回答

3

這是目前不可能與標準查詢langua GE。您可以通過聚合框架(可能)在某些性能損失下實現它。

+0

啊,那就是我害怕的 – johneth