You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 18:18:26