2014-06-08 2 views
0

일년 평균 방문수를 검색하려면 검색어를 만들어야합니다. 나는 꽤 mongoDB에 익숙하다. 그리고 나는 이것을 정말로하는 방법을 정말로 모른다.MongoDB 매월 평균 방문수를 얻으십시오.

이 내 데이터베이스 모델 (코드는 파이썬에)입니다 :

class Visits(Document): 
    year = IntField(default=datetime.datetime.now().year) 
    month = IntField(default=datetime.datetime.now().month) 
    day = IntField(default=datetime.datetime.now().day, unique_with=('month', 'year')) 
    visits = ListField(EmbeddedDocumentField('Visit')) 


class Posts(Document): 
    year = IntField(default=datetime.datetime.now().year) 
    month = IntField(default=datetime.datetime.now().month) 
    day = IntField(default=datetime.datetime.now().day, unique_with=('month', 'year')) 
    posts = ListField(EmbeddedDocumentField('Post')) 


class Visit(Document): 
    user = ReferenceField('User') 
    time_spent = IntField(default=0) 


class Post(Document): 
    id = IntField(primary_key=True) 
    user = ReferenceField('User') 
    number_of_comments = IntField(default=0) 
    number_of_clicks = IntField(default=0) 


class User(Document): 
    id = IntField(primary_key=True) 
    created_at = DateTimeField(default=datetime.datetime.now()) 
    test_subject = IntField(default="0") 
+0

http://api.mongodb.org/python/current/api/pymongo/collection.html#pymongo.collection.Collection.aggregate – JohnnyHK

+0

몽고뉴 (Mongoengine)를 사용하고 있습니다. 실제 집계를 실행하는 방법을 찾을 수 없습니다. PyMongo에. –

답변

0

클래스에 ._get_collection() 방법을 사용하여 pymongo 드라이버에서 구현 당신은 원시 "수집"개체를 얻을 수 있습니다.

당신은 MongoDB를 2.6 이상 버전이 그렇다면 당신은 집계로 $size 연산자를 사용할 수 있습니다 :

result = Visits._get_collection().aggregate([ 
    { "$group": { 
     "_id": { 
      "year": "$year", 
      "month": "$month" 
     }, 
     "visits": { 
      "$sum": { "$size": "$visits" } 
     } 
    }} 
]) 

이전 MongoDB를 2.6로 요소의 수를 얻기 위해 먼저 배열을 $unwind해야합니다.

result = Visits._get_collection().aggregate([ 
    { "$unwind": "$visits" }, 
    { "$group": { 
     "_id": { 
      "year": "$year", 
      "month": "$month" 
     }, 
     "visits": { "$sum": 1 } 
    }} 
]) 

아마도 $match 연산자를 사용하여 범위를 제한하는 것이 좋습니다. PyMongo 및 MongoDB 스타일 쿼리는 장고 스타일과 조금 다르므로 MongoDB 설명서의 standard query operators을 사용하여 자신을 잘 알고 싶을 수도 있습니다.

+0

고맙습니다. 하루 종일 찾으려고했습니다. 스키마가 분석에 적합하다고 생각하십니까? 신의 축복이 있습니다! –

+0

@EduardoAlves 범위의 데이터를 정기적으로 쿼리하는 경우 어딘가에있는 "사전 집계 된"컬렉션에 항상 추가하는 것이 가장 좋습니다. 집계 프레임 워크를 사용하여 주기적으로 빌드하고 심지어 압축 결과에 대해 더 많은 집계를 수행 할 수도 있습니다. 실제로 필요한 것은 응용 프로그램의 사용 패턴과 처리중인 데이터의 크기에 따라 다릅니다. –

관련 문제