mongodb - 如何比较 MongoDB 中的两个对象(忽略键的顺序)?

标签 mongodb mongodb-query

查找 objA 与 objB 相同的所有文档的最佳方法是什么(键的顺序并不重要)?

灵感来自another question作者:@Digvijay,我正在寻找一种方法来比较 MongoDB 查询上的两个对象,但在 SO 上找不到相关的解决方案。

示例数据:

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

预期结果:

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

最佳答案

你可以这样做:

  • $objectToArray - 将 objAobjB 转换为数组。
  • $setEquals - 比较上述数组是否具有相同的不同元素。
db.collection.aggregate([
  {
    $match: {
      $expr: {
        $setEquals: [
          { $objectToArray: "$objA" },
          { $objectToArray: "$objB" }
        ]
      }
    }
  }
])

Working example

关于mongodb - 如何比较 MongoDB 中的两个对象(忽略键的顺序)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74963395/

相关文章:

java - 如何通过 Autowiring 服务测试 spring-boot 上的 Controller 层?

php - 更改 RockMongo 中的默认用户名/密码

javascript - 从连续值中提取范围

node.js - "Join"MongoDB中使用 Node js的两个集合

java - MongoTemplate 插入状态

android - 以一定间隔发送大量推送通知

database - 使用 MongoDB 中员工集合中每个员工的 10% 更新薪资字段值

MongoDB 查询子文档数组

node.js - MongoWriteConcernError : No write concern mode named 'majority;' found in replica set configuration at MessageStream. 消息处理程序

node.js - 如何在 mongo 投影内重命名查询对象中的字段?