我设法找到所有重复在我的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))
应该只返回不同的条目,所以如果某项已经在集合中,则不应该包含重复项。