我在MongoDB中有一个字符串类型的字段。它将包含一些字母和数字的组合,如“10”,“101”,“11”,“112”,“x115”,“abc.5”。现在,如果我告诉MongoDB对这些进行排序,它会按字母顺序排序,排序如下:
它将“101”排序在“11”之前,我如何更改排序以使数字正确排序?
yyhrrdl81#
如果您决定在数据库端执行此操作,则可能需要使用**db.eval**。Answer extracted from another question:我认为这不可能直接实现;sort文档当然没有提到任何提供自定义比较函数的方法。您可能最好在客户机上进行排序,但如果您真的决定在服务器上进行排序,您可能可以使用db.eval()来安排在服务器上运行排序(如果您的客户机支持它)。服务器端排序:
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 });
e4eetjau2#
可以将排序规则与numericOrdering参数一起使用。示例:
numericOrdering
db.collectionName.find() .sort({fieldToSortOnName: -1}) .collation({locale: "en_US", numericOrdering: true})
这里的locale:en_US用于进行不区分大小写的搜索或排序。
en_US
2条答案
按热度按时间yyhrrdl81#
如果您决定在数据库端执行此操作,则可能需要使用**
db.eval
**。Answer extracted from another question:
我认为这不可能直接实现;sort文档当然没有提到任何提供自定义比较函数的方法。
您可能最好在客户机上进行排序,但如果您真的决定在服务器上进行排序,您可能可以使用
db.eval()
来安排在服务器上运行排序(如果您的客户机支持它)。服务器端排序:
与等效的客户端排序相比:
e4eetjau2#
可以将排序规则与
numericOrdering
参数一起使用。示例:这里的locale:
en_US
用于进行不区分大小写的搜索或排序。