Cyb*_*ova 4 python mongodb pymongo
首先,我是mongo的新手所以我不太了解,因为一些依赖,我不能删除重复的行.
我有以下数据存储在mongo中
{'id': 1, 'key': 'qscderftgbvqscderftgbvqscderftgbvqscderftgbvqscderftgbv', 'name': 'some name', 'country': 'US'},
{'id': 2, 'key': 'qscderftgbvqscderftgbvqscderftgbvqscderftgbvqscderftgbv', 'name': 'some name', 'country': 'US'},
{'id': 3, 'key': 'pehnvosjijipehnvosjijipehnvosjijipehnvosjijipehnvosjiji', 'name': 'some name', 'country': 'IN'},
{'id': 4, 'key': 'pfvvjwovnewpfvvjwovnewpfvvjwovnewpfvvjwovnewpfvvjwovnew', 'name': 'some name', 'country': 'IN'},
{'id': 5, 'key': 'pfvvjwovnewpfvvjwovnewpfvvjwovnewpfvvjwovnewpfvvjwovnew', 'name': 'some name', 'country': 'IN'}
Run Code Online (Sandbox Code Playgroud)
你可以看到一些行是重复的,具有不同的id,只要从输入中解决这个问题我必须在输出上解决它.
我需要以下列方式获取数据:
{'id': 1, 'key': 'qscderftgbvqscderftgbvqscderftgbvqscderftgbvqscderftgbv', 'name': 'some name', 'country': 'US'},
{'id': 3, 'key': 'pehnvosjijipehnvosjijipehnvosjijipehnvosjijipehnvosjiji', 'name': 'some name', 'country': 'IN'},
{'id': 4, 'key': 'pfvvjwovnewpfvvjwovnewpfvvjwovnewpfvvjwovnewpfvvjwovnew', 'name': 'some name', 'country': 'IN'}
Run Code Online (Sandbox Code Playgroud)
我的查询
keys = db.collection.distinct('key', {})
all_data = db.collection.find({'key': {$in: keys}})
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,对同一个结果集需要两个查询请将它组合为一个,因为数据库非常大
我还可以创建一个unique key在key但价值这么长时间(152个字符),它不会帮我.
还是会?
您需要使用聚合框架.有多种方法可以做到这一点,下面的解决方案使用$$ROOT变量来获取每个组的第一个文档:
db.data.aggregate([{
"$sort": {
"_id": 1
}
}, {
"$group": {
"_id": "$key",
"first": {
"$first": "$$ROOT"
}
}
}, {
"$project": {
"_id": 0,
"id":"$first.id",
"key":"$first.key",
"name":"$first.name",
"country":"$first.country"
}
}])
Run Code Online (Sandbox Code Playgroud)