MongoDB排序不会产生与数组字段

时间:2015-08-11 19:14:47

标签: mongodb

此查询:

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}(我的例子似乎无法正常工作)

1 个答案:

答案 0 :(得分:1)

http://docs.mongodb.org/manual/reference/operator/aggregation/sort/

对于数组,小于比较或升序排序比较数组的最小元素,大于比较或降序排序比较数组的最大元素。因此,当将值为单元素数组(例如[1])的字段与非数组字段(例如2)进行比较时,比较在1和2之间。空数组的比较(例如[])将空数组视为小于null或缺少字段。