从 MongoDB 个查询结果中删除重复的对象

Remove duplicated objects from MongoDB query results

我在 mongo 中有一个由匹配和项目操作组成的聚合管道,结果我有一个对象数组。

结果示例:

[{"pdb_id":"1avy"},{"pdb_id":"1avy"},{"pdb_id":"1lwu"}]

我想删除重复的对象,所以结果应该是:

[{"pdb_id":"1avy"},{"pdb_id":"1lwu"}]

工作解决方案的示例是:

 const uniqueArray = result.filter((object,index) => index === result.findIndex(obj => JSON.stringify(obj) === JSON.stringify(object)));

但是当我涉及更多数据时,这会非常慢。您知道更快的解决方案吗?

请考虑结果中的对象也可能有多个属性。例如:

[{"pdb_id":"1avy", "pdb_chain":"A"},{"pdb_id":"1avy", "pdb_chain":"A"},{"pdb_id":"1lwu", "pdb_chain":"A"}]

需要过滤到:

 [{"pdb_id":"1avy", "pdb_chain":"A"},{"pdb_id":"1lwu", "pdb_chain":"A"}]

如果你想让它在 Mongo 的帮助下完成,除了使用 $group:

别无选择
db.collection.aggregate([
  {
    $project: {
      _id: 0
    }
  },
  {
    $group: {
      _id: "$$ROOT"
    }
  },
  {
    "$replaceRoot": {
      "newRoot": "$_id"
    }
  }
])

Mongo Playground

显然 Mongo 有一些 limits,假设您没有达到 100 mb 的限制,这应该始终是更快的选择。