此查询:
db.getCollection('test_sort').find({}).sort({'sort_field': 1})
得出这个结果:
/* 1 */
{
"_id" : ObjectId("55ca4705824fb4055859fc3d"),
"sort_field" : [
0,
".",
55
]
}
/* 2 */
{
"_id" : ObjectId("55ca4716824fb4055859fc3e"),
"sort_field" : [
0,
".",
1
]
}
/* 3 */
{
"_id" : ObjectId("55ca471e824fb4055859fc3f"),
"sort_field" : [
0,
".",
22
]
}
/* 4 */
{
"_id" : ObjectId("55ca4726824fb4055859fc40"),
"sort_field" : [
0,
".",
84
]
}
/* 5 */
{
"_id" : ObjectId("55ca472d824fb4055859fc41"),
"sort_field" : [
0,
".",
12
]
}
这似乎不对。 MongoDB是否忽略了数组的内容?它似乎没有,在其他测试中似乎按预期工作。
根据gbot的答案,在升序的情况下,使用数组的最小成员。这有什么变通方法吗?如果变通方法需要特定长度的数组,例如,这是可以的。 {"sort_field.0": 1, "sort_field.1": 1, "sort_field.2": 1}
(我的例子似乎无法正常工作)
答案 0 :(得分:1)
http://docs.mongodb.org/manual/reference/operator/aggregation/sort/
对于数组,小于比较或升序排序比较数组的最小元素,大于比较或降序排序比较数组的最大元素。因此,当将值为单元素数组(例如[1])的字段与非数组字段(例如2)进行比较时,比较在1和2之间。空数组的比较(例如[])将空数组视为小于null或缺少字段。