我需要在我的集合中的一个字段上进行字母数字排序。该字段包含染色体信息。
Chr1,
Chr2,
..,
..,
..,
Chr10,
Chr11,
..,
..,
ChrX,
ChrY
不是按此顺序获取值,而是在
中获取它们Chr1,
Chr11
这是一个常见的问题,并且想知道MongoDB是否有这种内置解决方案,或者我们应该像通常在Oracle中那样破解它。 如果没有内置解决方案,那么最好的方法是什么?自然排序是一种可接受的解决方案,但我已将其应用于其他领域。
任何帮助都将不胜感激。
答案 0 :(得分:5)
MongoDB没有按字母数字排序数据的内置方法。但是当所有数据都有一个字符串,其字符串具有相同的“Chr”+数字约定时,您可以将该数字放入不同的字段,将其保存为整数而不是字符串,然后按此排序。
答案 1 :(得分:1)
请参阅“ https://docs.mongodb.com/manual/reference/collation”。
Mongo为字母数字排序提供排序规则。
示例:-
db.names.find({})。sort({username:1})。collation({locale:'en_US',numericOrdering:true})
答案 2 :(得分:0)
如果你在 mongodb 中使用聚合,你也可以使用:-
db.names.aggregate([...query, {$sort:{username:1}]).collation({locale:'en_US', numericOrdering:true});
不要忘记在查询数组中添加键的排序,否则您将无法获得排序顺序。
文档中没有这个东西。