0

有没有一种基于 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首先匹配。

有没有办法做到这一点?

抱歉,如果这是一个已经提出的问题,但我似乎无法找到任何解决方案。

4

1 回答 1

3

目前,标准查询语言无法做到这一点。您可以使用聚合框架以(可能)一些性能损失来实现它。

于 2012-12-14T14:40:07.370 回答