如何对MongoDB Object-ID数组排序,使相似ID相邻
MongoDB Object-ID数组排序:让相似ID相邻
我有一个MongoDB Object-ID组成的数组,需要对它进行排序,让相似(重复)的ID彼此相邻。示例如下:
输入:
var array = ["507f191e810c19729de860ea","00000020f51bb4362eee2a4d","507f191e810c19729de860ea"]
输出:
var array = ["507f191e810c19729de860ea","507f191e810c19729de860ea","00000020f51bb4362eee2a4d"]
解决方法
MongoDB Object-ID本质是字符串类型,针对需求可分两种场景处理:
场景1:仅让相同ID相邻(不考虑出现次数顺序)
直接使用数组原生的sort()方法即可,它会按字符串字典序排序,自动将相同ID聚在一起:
var array = ["507f191e810c19729de860ea","00000020f51bb4362eee2a4d","507f191e810c19729de860ea"]; array.sort(); console.log(array); // 输出:["00000020f51bb4362eee2a4d", "507f191e810c19729de860ea", "507f191e810c19729de860ea"]
场景2:让出现次数多的ID组排在前面(与示例输出一致)
先统计每个ID的出现次数,再自定义排序规则,优先按出现次数降序排列,次数相同则按ID字符串排序:
var array = ["507f191e810c19729de860ea","00000020f51bb4362eee2a4d","507f191e810c19729de860ea"]; // 统计每个ID的出现次数 const countMap = array.reduce((acc, id) => { acc[id] = (acc[id] || 0) + 1; return acc; }, {}); // 自定义排序规则 array.sort((a, b) => { // 先按出现次数降序 if (countMap[b] !== countMap[a]) { return countMap[b] - countMap[a]; } // 次数相同则按字符串字典序排序 return a.localeCompare(b); }); console.log(array); // 输出:["507f191e810c19729de860ea", "507f191e810c19729de860ea", "00000020f51bb4362eee2a4d"]
内容的提问来源于stack exchange,提问作者taha hdp
相关产品推荐
相关产品推荐

