У меня есть база данных контактов с mongo-backed, и я пытаюсь найти повторяющиеся записи несколькими путями.
Например, если 2 контакта имеют одинаковый номер телефона, они помечены как возможный дубликат, то же самое для электронной почты и т.д.
Я использую MongoDB 2.4.2 на Debian с 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}
]}
Итак, я могу получить числа, которые являются дубликатами, но я не могу для жизни понять, как вернуть массив документов, которые фактически содержали эти элементы!
Я хочу видеть данные типа возврата для каждого числа:
# 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},
Любая помощь очень ценится!