我在 MongoDB 中有一个字符串类型的字段。它将包含一些字母和数字的组合,例如“10”、“101”、“11”、“112”、“x115”、“abc.5”。现在,如果我告诉 MongoDB 对这些进行排序,它将按字母顺序进行排序,如下所示:
- 10
- 101
- 11
- 112
- abc.5
- x115
它在“11”之前订购“101”,我如何更改排序以便正确排序数字?
db.eval
如果您决定在数据库端执行此操作,您可能想要使用。
我不认为这是直接可能的。排序文档 当然没有提到提供自定义比较功能的任何方法。
您可能最好在客户端进行排序,但如果您真的决定在服务器上进行排序,您可能可以
db.eval()
用来安排在服务器上运行排序(如果您的客户端支持它)。服务器端排序:
db.eval(function() { return db.scratch.find().toArray().sort(function(doc1, doc2) { return doc1.a - doc2.a }) });
与等效的客户端排序相比:
db.scratch.find().toArray().sort(function(doc1, doc2) { return doc1.a - doc2.b });
您可以将排序规则与 numericOrdering 参数一起使用。例子:
db.collectionName.find().sort({fieldToSortOnName: -1}).collation({locale: "en_US", numericOrdering: true})
这里 locale: 'en_us' 用于进行不区分大小写的搜索或排序。