2013-07-18 11 views
10

Ho un database di contatti mongo supportato e sto cercando di trovare voci duplicate in diversi modi.Mongo - Come posso aggregare, filtrare e includere una matrice di dati dai documenti corrispondenti?

Per esempio, se 2 contatti hanno lo stesso numero di telefono che vengono contrassegnati come un possibile duplicato, idem per e-mail, ecc

sto usando MongoDB 2.4.2 su Debian con pyMongo e MongoEngine.

Il più vicino che ho finora è trovare e contando i record che contengono lo stesso numero di telefono:

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} 
]} 

modo da poter ottenere i numeri che sono duplicati, ma non posso per la vita di me figura come restituire un array di documenti che in realtà contenevano questi elementi!

Voglio vedere questo tipo di dati di ritorno per ogni numero:

# 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}, 

Qualsiasi aiuto è molto apprezzato!

risposta

Problemi correlati