从 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 有一些 limits,假设您没有达到 100 mb 的限制,这应该始终是更快的选择。
我在 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 有一些 limits,假设您没有达到 100 mb 的限制,这应该始终是更快的选择。