我在MongoDB中有一个String类型的字段。它将包含一些字母和数字的组合,如“10”,“101”,“11”,“112”,“x115”,“abc.5”。现在,如果我告诉MongoDB对它们进行排序,它将按字母顺序排序,按顺序排序:
在“11”之前命令“101”,我怎样才能更改排序以便正确排序数字?
答案 0 :(得分:2)
如果您决定在数据库端执行此操作,则可能需要使用 db.eval
。
Answer extracted from another question:
我认为这不可能直接; sort documentation 当然没有提到任何提供自定义比较的方法 功能
你可能最好在客户端进行排序,但如果你是 真的决定在你可能能够使用的服务器上做到这一点
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 });
答案 1 :(得分:0)
您可以将排序规则与numericOrdering参数一起使用。 示例:
db.collectionName.find().sort({fieldToSortOnName: -1}).collation({locale: "en_US", numericOrdering: true})
在这里语言环境:“ en_us”用于进行不区分大小写的搜索或排序。