我有如下文档结构:
{
map: 'A',
points: [
{
type: 'type1',
distanceToSpawn: 110
},
{
type: 'type4',
distanceToSpawn: 40
},
{
type: 'type6',
distanceToSpawn: 30
}
]
},
{
map: 'B',
points: [
{
type: 'type1',
distanceToSpawn: 100
},
{
type: 'type2',
distanceToSpawn: 60
},
{
type: 'type3',
distanceToSpawn: 25
}
]
},
{
map: 'C',
points: [
{
type: 'type2',
distanceToSpawn: 90
},
{
type: 'type3',
distanceToSpawn: 1
},
{
type: 'type6',
distanceToSpawn: 76
}
]
}
我希望获取所有具有点类型 type1
的地图,并按照到生成点的距离 distanceToSpawn
升序排序。
期望结果:
{
map: 'B',
points: [
{
type: 'type1',
distanceToSpawn: 100
}
]
},
{
map: 'A',
points: [
{
type: 'type1',
distanceToSpawn: 110
}
]
}
我尝试了类似于:
db.maps.find({'points.type': {$eq : 'type1'}}, {map: 1, 'points.$':1}).sort({'points.distanceToSpawn': 1}).limit(10)
但是这个东西没有按升序排序地图。
谢谢。
$sort
操作符之前使用$unwind
操作符时,它无法利用索引。(我在尝试按数组字段排序时遇到了相同的问题,总是使用数组的第一个项目进行比较。) - phwa4563sort
是否应该基于order.distanceToSpawn
而不仅是order
?如果不是,为什么? - Graham Clark