通过elemMatch在MongoDB中排序

时间:2012-12-14 13:56:23

标签: mongodb

是否有基于$elemMatch在MongoDB中进行排序的方法?例如,我的文档看起来像这样:

{
    '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

有办法做到这一点吗?

如果这是一个已经被问到的问题,请道歉,但在看完之后我似乎找不到任何解决方案。

1 个答案:

答案 0 :(得分:3)

标准查询语言目前无法实现。您可以通过聚合框架实现(可能)一些性能损失。