mongoose/mongodb自定义排序

flvlnr44  于 2023-05-06  发布在  Go
关注(0)|答案(2)|浏览(134)

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

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

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

yyhrrdl8

yyhrrdl81#

如果您决定在数据库端执行此操作,则可能需要使用**db.eval**。
Answer extracted from another question:
我认为这不可能直接实现;sort文档当然没有提到任何提供自定义比较函数的方法。
您可能最好在客户机上进行排序,但如果您真的决定在服务器上进行排序,您可能可以使用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 
});
e4eetjau

e4eetjau2#

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

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

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

相关问题