2012-12-14 80 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