注意:这个答案是不正确的。留下它,因为评论中有澄清的讨论。
看起来你做对了。请记住,如果您将值存储为字符串,mongo 将按字典顺序(即"10"
在之前"2"
)而不是按数字顺序(在2
之前10
)对其进行排序。
> for (let i = 0; i < 15; i++) { db.example.insert({i: "" + i}) }
WriteResult({ "nInserted" : 1 })
> db.example.find({}).sort({i: 1});
{ "_id" : ObjectId("5d27111931deb3f658760d4a"), "i" : "0" }
{ "_id" : ObjectId("5d27111931deb3f658760d4b"), "i" : "1" }
{ "_id" : ObjectId("5d27111931deb3f658760d54"), "i" : "10" }
{ "_id" : ObjectId("5d27111931deb3f658760d55"), "i" : "11" }
{ "_id" : ObjectId("5d27111931deb3f658760d56"), "i" : "12" }
{ "_id" : ObjectId("5d27111931deb3f658760d57"), "i" : "13" }
{ "_id" : ObjectId("5d27111931deb3f658760d58"), "i" : "14" }
{ "_id" : ObjectId("5d27111931deb3f658760d4c"), "i" : "2" }
{ "_id" : ObjectId("5d27111931deb3f658760d4d"), "i" : "3" }
{ "_id" : ObjectId("5d27111931deb3f658760d4e"), "i" : "4" }
{ "_id" : ObjectId("5d27111931deb3f658760d4f"), "i" : "5" }
{ "_id" : ObjectId("5d27111931deb3f658760d50"), "i" : "6" }
{ "_id" : ObjectId("5d27111931deb3f658760d51"), "i" : "7" }
{ "_id" : ObjectId("5d27111931deb3f658760d52"), "i" : "8" }
{ "_id" : ObjectId("5d27111931deb3f658760d53"), "i" : "9" }
如果您想对这些数字进行数字排序,可以使用聚合(在 mongo 4x 中)首先将它们转换为整数然后对它们进行排序:
db.example.aggregate([{$project: {int: {"$toInt": "$i"}}}, {$sort: {"int": 1}}])
{ "_id" : ObjectId("5d2711d8834199b3de049d8d"), "int" : 0 }
{ "_id" : ObjectId("5d2711d8834199b3de049d8e"), "int" : 1 }
{ "_id" : ObjectId("5d2711d8834199b3de049d8f"), "int" : 2 }
{ "_id" : ObjectId("5d2711d8834199b3de049d90"), "int" : 3 }
{ "_id" : ObjectId("5d2711d8834199b3de049d91"), "int" : 4 }
{ "_id" : ObjectId("5d2711d8834199b3de049d92"), "int" : 5 }
{ "_id" : ObjectId("5d2711d8834199b3de049d93"), "int" : 6 }
{ "_id" : ObjectId("5d2711d8834199b3de049d94"), "int" : 7 }
{ "_id" : ObjectId("5d2711d8834199b3de049d95"), "int" : 8 }
{ "_id" : ObjectId("5d2711d8834199b3de049d96"), "int" : 9 }
{ "_id" : ObjectId("5d2711d8834199b3de049d97"), "int" : 10 }
{ "_id" : ObjectId("5d2711d8834199b3de049d98"), "int" : 11 }
{ "_id" : ObjectId("5d2711d8834199b3de049d99"), "int" : 12 }
{ "_id" : ObjectId("5d2711d8834199b3de049d9a"), "int" : 13 }
{ "_id" : ObjectId("5d2711d8834199b3de049d9b"), "int" : 14 }
但实际上,最好更新所有 _id,使它们是数字而不是字符串(或只是常规的 mongo _id)。如何在mongodb中将字符串转换为数值有一个如何进行转换的示例