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

如何在MongoDB中比较两个对象(忽略键顺序)并查找匹配文档?

在MongoDB中查找objA与objB内容相同(键顺序无关)的文档

要筛选出objA和objB内容完全一致(键的顺序不影响判断)的文档,可以利用MongoDB聚合管道结合$objectToArray和$setEquals操作符实现,具体方案如下:

核心解决方案:聚合管道匹配

通过将对象转换为键值对数组,再比较两个数组的元素集合是否相等(集合不考虑元素顺序),即可判断两个对象内容是否一致。

执行以下聚合查询:

db.collection.aggregate([
  {
    $match: {
      $expr: {
        $setEquals: [
          { $objectToArray: "$objA" },
          { $objectToArray: "$objB" }
        ]
      }
    }
  }
])

代码说明

  • $objectToArray:将objA和objB分别转换为[{k: 键名, v: 键值}, ...]格式的数组,消除对象键的顺序差异。
  • $setEquals:检查两个数组的元素集合是否完全相同(元素顺序不影响结果),若相同则返回true,匹配该文档。
  • $expr:允许在$match阶段使用聚合表达式进行条件判断。

验证结果

针对你提供的示例数据,执行上述查询后,将返回符合预期的结果:

[
  {
    "objA": {"a": 1, "b": 2},
    "objB": {"a": 1, "b": 2}
  },
  {
    "objA": {"m": "g", "c": 5},
    "objB": {"c": 5, "m": "g"}
  }
]

内容的提问来源于Stack Exchange,提问作者nimrod serok

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 23:55:16