2013-08-30 45 views
1

我在Mongo DB中有一個巨大的集合。比較每個對象在一個巨大的列表中的最佳方法?

問題:假設我有300萬條記錄檢索爲列表,我必須在列表中使用一些條件對列表中的每個對象進行比較。 什麼是最有效的解決問題的方法?

有沒有什麼辦法直接從數據庫中獲取這樣的記錄,或者在獲取數據後在python中執行比較。

例如,數據:

學生:[ {ID:001,名稱: '約翰',rollNo: '666', '年齡:25', '業餘愛好':'國際象棋,唱歌,打網球'},{ID:002,名稱:' 娶 'rollNo: '555', '年齡:15', '業餘愛好': '國際象棋,網球', '唱歌'},{ID:003,名稱:' 埃裏克',rollNo:'444','age:20','hobby':'soccer,tennis','dance'}, < - 重複 {id:003,name:'Bob',rollNo:'444 ','年齡:20','愛好':'足球,網球','舞蹈'}, < - 重複 {id:004,name:'Alice',rollNo:'666','age:25 ','hobby':'tennis','skates','dance'}]

需要產生一些分析: 所有重複,它們都具有類似興趣愛好等。

感謝提前:)

+0

你可以試試mongo聚合框架 – Denis

回答

0

蒙戈聚合框架或一些Python腳本

from collections import defaultdict 


name = defaultdict(list) 
for student in students:  
    name[student['name']] = student['id'] 
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}}} 
]) 
相關問題