2013-04-05 3 views
1

저는 python과 pymongo를 사용하고 있습니다.카운트를 얻어 그룹화하십시오.

다른 국가의 메시지를 저장하는 mongo 컬렉션 중 하나입니다. 모든 문서에는 국가를 나타내는 짧은 국가 코드가 하나 있습니다. 어떻게 그룹화하고 모든 국가 코드를 계산할 수 있는지 알고 싶습니까? 예를

{u'tweet': u"If you're male and own an iPhone, get new star soccer. Holy shit it's addictive", u'loc': u"US", u'_id': ObjectId('515ecace4e18187ca67ddfcb'), u'time': datetime.datetime(2013, 4, 5, 12, 59, 57)} 

를 들어

위의 위치에 메시지의 하나의 행이며, 내 데이터베이스에, SG, AU 등은 ... 다른 위치가 차이를 메시지 수있을 것이다 미국을 가질 수있다. 어떻게하면 쿼리 할 수 ​​있습니까 아니면 가능한 모든 접근 방식입니까? 감사합니다

UPDATE

내가 나를 위해 google chart generate the chart 다음 코드로 데이터를 주입해야하기 때문에 내가 카운트를 얻고 싶은 이유입니다.

var data = google.visualization.arrayToDataTable([ 
     ['Country', 'Popularity'], 
     ['Germany', 200], 
     ['United States', 300], 
     ['Brazil', 400], 
     ['Canada', 500], 
     ['France', 600], 
     ['RU', 700] 
    ]); 
+0

http://docs.mongodb.org/manual/reference/aggregation/group/ – dm03514

답변

2

집계 프레임 워크를 사용하십시오.

db.collection.aggregate({$group:{_id:"$loc", count: {$sum:1}}} 

이렇게하면 각 국가에 대해 언급 한 시간이 반환됩니다.

1

내 첫 번째 본능은 MongoClient 커서를 읽을 때 레코드를 사전에 그룹화하는 것입니다. 각 키는 국가가되며 각 값은 해당 국가의 모든 레코드 목록입니다.

import pymongo 
con = pymongo.MongoClient() 
db = con.myDatabase 
col = db.myCollection 
cursor = col.find() 

data = {} 
for c in cursor: 
    if not c["loc"] in data.keys(): 
     data[c["loc"]] = [] 
    data[c["name"]].append(c) 

물론 모든 레코드에는 예제의 "loc"키가 있다고 가정합니다.

+0

또한 len (data [ "key"])는 모든 국가의 카운트를 제공합니다. – ccray

+0

대단히 감사드립니다. 카운트를 얻는 방법을 사용하면 자바 스크립트에 게시 할 수 있습니까? 업데이트를 확인하십시오. 감사합니다 – 1myb

+0

위치별로 집계 된 수만큼 데이터베이스 서버를 쿼리 할 수있을 때 왜 클라이언트에서 작업하고 싶습니까? –

관련 문제