Имам база данни с контакти, поддържана от mongo, и се опитвам да намеря дублиращи се записи по куп различни начини.
Например, ако 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},
Всяка помощ е високо ценена!