MongoDB每月平均每天访问量

2024-09-29 05:31:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要创建一个查询来检索每天的平均访问次数,按年份和月份分组。 我对mongoDB还是个新手,我真的不知道该怎么做。在

这是我的数据库模型(代码用python编写):

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")

Tags: defaultdatetimewithvisitdocumentyearnowclass
1条回答
网友
1楼 · 发布于 2024-09-29 05:31:09

您可以使用类上的._get_collection()方法获得pymongo驱动程序实现的原始“collection”对象。在

因此,如果您有一个MongoDB 2.6或更高版本,则可以使用^{}运算符进行聚合:

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

在MongoDB 2.6之前,您需要先^{}数组才能获得元素的计数。在

^{pr2}$

使用^{}运算符来限制范围可能是个好主意。PyMongo和MongoDB样式的查询与django样式稍有不同,因此您可能需要熟悉MongoDB手册中的standard query operators。在

相关问题 更多 >