mongoose / mongodb自定义排序

时间:2013-02-06 02:12:34

标签: node.js mongodb mongoose

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

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

在“11”之前命令“101”,我怎样才能更改排序以便正确排序数字?

2 个答案:

答案 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”用于进行不区分大小写的搜索或排序。