是否有基于$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
。
有办法做到这一点吗?
如果这是一个已经被问到的问题,请道歉,但在看完之后我似乎找不到任何解决方案。
答案 0 :(得分:3)
标准查询语言目前无法实现。您可以通过聚合框架实现(可能)一些性能损失。