如何使用 python 从 mongodb collection 中查找和删除重复文档
how to find and remove duplicates documents from mongodb collection using python
如何使用 python 从 mongodb 中查找和删除重复文档。
我们总共有 7 documents/records 个 documents/records 是重复的。所以需要找到那些重复的 document/records 并从相同的 collection 中删除。在文档中我们将有 100 个属性,因此我们无法根据少数属性找到文档。我们需要完全相同的副本 document/records
MongoDB collection
[
{ 'name': 'Amy', 'address': 'Apple st 652', 'age': 34 },
{ 'name': 'Hannah', 'address': 'Mountain 21', 'age': 34 },
{ 'name': 'Hannah', 'address': 'Mountain 21', 'age': 34 },
{ 'name': 'Amy', 'address': 'Apple st 652', 'age': 34 },
{ 'name': 'Richard', 'address': 'Sky st 331', 'age': 34 },
{ 'name': 'Chuck', 'address': 'Main Road 989', 'age': 34 },
{ 'name': 'Viola', 'address': 'Sideway 1633', 'age': 34 },
];
输出Collection
[
{ 'name': 'Amy', 'address': 'Apple st 652' },
{ 'name': 'Hannah', 'address': 'Mountain 21' },
{ 'name': 'Richard', 'address': 'Sky st 331' },
{ 'name': 'Chuck', 'address': 'Main Road 989' },
{ 'name': 'Viola', 'address': 'Sideway 1633' },
];
您可以使用代表完整文档的 $$ROOT 并对其进行分组,如下所示:
db.collection.aggregate([
{
$project: {
_id: 0,
}
},
{
$group: {
_id: "$$ROOT"
}
},
{
$replaceRoot: {
newRoot: "$_id"
}
}
])
如您所见,我们必须删除 _id
字段,因为它是唯一的并且会破坏该方法,另外需要考虑的一点是,这会将整个集合加载到内存中。如果您的机器无法处理它,您别无选择,只能合并代码并对集合进行分页。
db.dup_doc.aggregate([
{
$project: {
_id: 0,
"name":"$name"
}
},
{
$group: {
_id: "$$ROOT"
}
},
{
$replaceRoot: {
newRoot: "$_id"
}
},
{ $out: 'dup_doc' }
])
如何使用 python 从 mongodb 中查找和删除重复文档。 我们总共有 7 documents/records 个 documents/records 是重复的。所以需要找到那些重复的 document/records 并从相同的 collection 中删除。在文档中我们将有 100 个属性,因此我们无法根据少数属性找到文档。我们需要完全相同的副本 document/records
MongoDB collection
[
{ 'name': 'Amy', 'address': 'Apple st 652', 'age': 34 },
{ 'name': 'Hannah', 'address': 'Mountain 21', 'age': 34 },
{ 'name': 'Hannah', 'address': 'Mountain 21', 'age': 34 },
{ 'name': 'Amy', 'address': 'Apple st 652', 'age': 34 },
{ 'name': 'Richard', 'address': 'Sky st 331', 'age': 34 },
{ 'name': 'Chuck', 'address': 'Main Road 989', 'age': 34 },
{ 'name': 'Viola', 'address': 'Sideway 1633', 'age': 34 },
];
输出Collection
[
{ 'name': 'Amy', 'address': 'Apple st 652' },
{ 'name': 'Hannah', 'address': 'Mountain 21' },
{ 'name': 'Richard', 'address': 'Sky st 331' },
{ 'name': 'Chuck', 'address': 'Main Road 989' },
{ 'name': 'Viola', 'address': 'Sideway 1633' },
];
您可以使用代表完整文档的 $$ROOT 并对其进行分组,如下所示:
db.collection.aggregate([
{
$project: {
_id: 0,
}
},
{
$group: {
_id: "$$ROOT"
}
},
{
$replaceRoot: {
newRoot: "$_id"
}
}
])
如您所见,我们必须删除 _id
字段,因为它是唯一的并且会破坏该方法,另外需要考虑的一点是,这会将整个集合加载到内存中。如果您的机器无法处理它,您别无选择,只能合并代码并对集合进行分页。
db.dup_doc.aggregate([
{
$project: {
_id: 0,
"name":"$name"
}
},
{
$group: {
_id: "$$ROOT"
}
},
{
$replaceRoot: {
newRoot: "$_id"
}
},
{ $out: 'dup_doc' }
])