使用Python 3删除MongoDB中重复数据的方法



我设法找到所有重复在我的MongoDB使用Python 3脚本。

duplicates = keywordsCollection.aggregate([{"$group":{"_id":"$keyword", "dups":{"$push":"$_id"}, "count": {"$sum": 1}}},
{"$match":{"count": {"$gt": 1}}}
])

print(list(duplicates))
下面是我运行脚本的结果:
[{'_id': 'computer', 'dups': [ObjectId('600c40b31cc42f9c113f4d6a'), ObjectId('600c40b31cc42f9c113f4d6d')], 'count': 2}, {'_id': 'software computer', 'dups': [ObjectId('600c40b31cc42f9c113f4d67'), ObjectId('600c40b31cc42f9c113f4d68')], 'count': 2}]

现在我需要做的是删除这些duplicates data.I've try:

db.keywords.aggregate([{$group:{_id:"$keyword", dups:{$push:"$_id"}, count: {$sum: 1}}},
{$match:{count: {$gt: 1}}}
]).forEach(function(doc){
doc.dups.shift();
db.dups.remove({_id : {$in: doc.dups}});
}); 

当我运行命令时,它有错误说它需要在调用foreach之前尝试转换为数组。我知道dropDups:true不能在Python 3中使用。除了foreach方法之外,还有其他方法可以删除重复的数据吗?提前谢谢。

您试过set()而不是list()吗?https://docs.python.org/3/tutorial/datastructures.html集

duplicates = keywordsCollection.aggregate([{"$group":{"_id":"$keyword", "dups":{"$push":"$_id"}, "count": {"$sum": 1}}},
{"$match":{"count": {"$gt": 1}}}
])

print(set(duplicates))

应该只返回不同的条目,所以如果某项已经在集合中,则不应该包含重复项。

最新更新