首先我是 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'}
你可以看到一些行是重复的,具有不同的 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'}
我的查询
keys = db.collection.distinct('key', {})
all_data = db.collection.find({'key': {$in: keys}})
如您所见,同一结果集需要两次查询请合并为一个,因为数据库非常大
我还可以在 key
上创建一个 unique 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"
}
}])
https://stackoverflow.com/questions/35877145/