我有一个 mongo 支持的联系人数据库,我正在尝试以多种不同的方式查找重复的条目。
例如,如果 2 个联系人具有相同的电话号码,则他们被标记为可能重复,电子邮件同上等。
我在 Debian 上使用 MongoDB 2.4.2 和 pyMongo 和 MongoEngine。
到目前为止,我最接近的是查找和计算包含相同电话号码的记录:
dbh.person_document.aggregate([
{'$unwind': '$phones'},
{'$group': {'_id': '$phones', 'count': {'$sum': 1}}},
{'$sort': SON([('count', -1), ('_id', -1)])}
])
# Results in
{u'ok': 1.0,
u'result': [{u'_id': {u'number': u'404-231-4444', u'showroom_id': 5}, u'count': 5},
{u'_id': {u'number': u'205-265-6666', u'showroom_id': 5}, u'count': 5},
{u'_id': {u'number': u'213-785-7777', u'showroom_id': 5}, u'count': 4},
{u'_id': {u'number': u'334-821-9999', u'showroom_id': 5}, u'count': 3}
]}
所以我可以得到重复的数字,但我一生都无法弄清楚如何返回实际包含这些项目的 Documents 数组!
我想看到每个数字的这种返回数据:
# The ObjectIDs of the documents that contained the duplicate phone numbers
{u'_id': {u'number': u'404-231-4444', u'showroom_id': 5},
u'ids': [ObjectId('51c67e322b2192121ec4d8f2'), ObjectId('51c67e312b2192121ec4d8f0')],
u'count': 2},
任何帮助是极大的赞赏!