15

mongo を利用した連絡先データベースを使用しており、さまざまな方法で重複するエントリを見つけようとしています。

たとえば、2 つの連絡先が同じ電話番号を持っている場合、それらは重複の可能性があるとしてフラグが付けられ、電子メールについても同様です。

Debian で pyMongo と MongoEngine を使用して MongoDB 2.4.2 を使用しています。

これまでで最も近いのは、同じ電話番号を含むレコードを見つけてカウントすることです:

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

どんな助けでも大歓迎です!

4

1 に答える 1