1

我在 MongoDB 中有一个字符串类型的字段。它将包含一些字母和数字的组合,例如“10”、“101”、“11”、“112”、“x115”、“abc.5”。现在,如果我告诉 MongoDB 对这些进行排序,它将按字母顺序进行排序,如下所示:

  • 10
  • 101
  • 11
  • 112
  • abc.5
  • x115

它在“11”之前订购“101”,我如何更改排序以便正确排序数字?

4

2 回答 2

2

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 
});
于 2013-02-06T02:17:01.937 回答
1

您可以将排序规则与 numericOrdering 参数一起使用。例子:

db.collectionName.find().sort({fieldToSortOnName: -1}).collation({locale: "en_US", numericOrdering: true})

这里 locale: 'en_us' 用于进行不区分大小写的搜索或排序。

于 2019-07-16T14:04:53.873 回答