这是因为,numbers
您的数据中被比较为String
。因此,您获得的排序值为1、10、2,依此类推。
创建集合索引时,必须指定与各种特定于语言的规则进行比较的比较。默认情况下,当您创建没有排序规则信息的集合时,默认值numericOrdering
设置为false-这意味着在比较时将数字视为字符串。
因此,您必须使用归类为numericOrdering
true的索引来创建索引,或者在查询时间内提供如下信息。
db.collection.find({}).sort({ "name": 1 }).collation({ locale: "en_US", numericOrdering: true })