Mongodb Mongo-如何聚合、过滤和包含匹配文档中的数据数组?
我有一个mongo支持的联系人数据库,我正试图用一系列不同的方法找到重复的条目 例如,如果两个联系人有相同的电话号码,则会将其标记为可能的重复,电子邮件等也一样 我在Debian上与pyMongo和MongoEngine一起使用MongoDB 2.4.2 到目前为止,我所掌握的最接近的信息是查找和统计包含相同电话号码的记录:Mongodb Mongo-如何聚合、过滤和包含匹配文档中的数据数组?,mongodb,aggregation-framework,pymongo,Mongodb,Aggregation Framework,Pymongo,我有一个mongo支持的联系人数据库,我正试图用一系列不同的方法找到重复的条目 例如,如果两个联系人有相同的电话号码,则会将其标记为可能的重复,电子邮件等也一样 我在Debian上与pyMongo和MongoEngine一起使用MongoDB 2.4.2 到目前为止,我所掌握的最接近的信息是查找和统计包含相同电话号码的记录: dbh.person_document.aggregate([ {'$unwind': '$phones'}, {'$group': {'_id': '$p
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},
非常感谢您的帮助 啊,愿上帝保佑
在上找到了几乎逐字逐句的解决方案
最终结果,添加一些额外内容以包括名称:
dbh.person_document.aggregate([
{'$unwind': '$phones'},
{'$group': {
'_id': '$phones',
'matchedDocuments': {
'$push':{
'id': '$_id',
'name': '$full_name'
}},
'num': { '$sum': 1}
}},
{'$match':{'num': {'$gt': 1}}}
])