在一个巨大的列表中比较每个对象的最佳方法?

时间:2013-08-30 11:03:56

标签: python mongodb

我在Mongo DB中收藏了很多。

问题:假设我有 300万条记录作为列表检索,我必须使用一些标准在列表中对每个对象进行相互比较。 什么是解决问题的最有效方法?

有没有办法直接从数据库获取这些记录,或者在获取数据后在python中执行比较。

例如数据:

  

学生:[   {ID:001,名称: '约翰',rollNo: '666', '年龄:25', '业余爱好': '国际象棋,唱歌,打网球'},{ID:002,名称: '娶',rollNo:” 555' , '年龄:15', '爱好': '国际象棋,网球', '唱歌'},{ID:003,名称: '埃里克',rollNo: '444', '年龄:20', '业余爱好' : '足球,网球', '舞'},   < - 重复   {ID:003,名称: '鲍勃',rollNo: '444', '年龄:20', '业余爱好': '足球,网球', '舞'},   < - 重复   {ID:004,名称: '爱丽丝',rollNo: '666', '年龄:25', '爱好': '网球', '溜冰鞋', '舞蹈'}]

需要生成一些分析: 所有重复,都有类似的爱好等。

提前致谢:)

2 个答案:

答案 0 :(得分:0)

Mongo聚合框架或一些python脚本

from collections import defaultdict


name = defaultdict(list)
for student in students:     
    name[student['name']] = student['id']

答案 1 :(得分:0)

我认为最好的方法是使用mongo aggregation framework,例如,重复年龄:

db.<collection>.aggregate([
    // group by age
    {$group: { _id: { age: '$age'}, names: {$push: '$name'}, count: {$sum: 1} }},
    // get all where count > 1
    {$match: {count: {$gt: 1}}}
])