MongoDb Sort使用字母数字值给出的结果不正确

Vũ *_*ũng 2 mongodb

 [
   {"name": "Card 1"},
   {"name": "Card 2"},
   {"name": "Card 10"}
 ]
Run Code Online (Sandbox Code Playgroud)

MongoDb结果的排序依据{ "name": 1 }

  [ 
    {"name": "Card 1"},
    {"name": "Card 10"},
    {"name": "Card 2"}
  ]
Run Code Online (Sandbox Code Playgroud)

我该如何纠正?

Mil*_*gmi 6

这是因为,numbers您的数据中被比较为String。因此,您获得的排序值为1、10、2,依此类推。

创建集合索引时,必须指定与各种特定于语言的规则进行比较的比较。默认情况下,当您创建没有排序规则信息的集合时,默认值numericOrdering设置为false-这意味着在比较时将数字视为字符串。

因此,您必须使用归类numericOrderingtrue的索引来创建索引,或者在查询时间内提供如下信息。

db.collection.find({}).sort({
  "name": 1
}).collation({
  locale: "en_US", numericOrdering: true
})
Run Code Online (Sandbox Code Playgroud)