Mongodb:按日期计算项目然后计算唯一项目

Mongodb: Count items by date then count unique items

我有一个集合,其中包含显示用户对此类对象的访问的项目:

{"_id" : ObjectId("559d63ac2ea9e7b53ecc3275"),
"user" : {
    "id" : "65585",
    "cookie" : "spzSznyfDeeFMptiKZqqDg"
    },
"object_id" : "3",
"createddate" : ISODate("2015-07-08T17:53:48.209Z")}

我需要按 object_id 和每天 select 个唯一用户对它们进行逐日分组并对其进行计数。 现在我有代码可以计算给定对象的视图和 selects 不同的用户数组查看该对象。现在我需要计算这个用户。 代码是:

db.objects.aggregate([
{"$match": {createddate: {$gt : ISODate("2015-07-01T00:00:00.000Z"), $lte : ISODate("2015-07-15T00:00:00.000Z")}} },
{"$match": {object_id: '1'}},
{"$group": {
    "_id": {
        "$subtract": [
            "$createddate",
            { "$mod": [
                { "$subtract": [ "$createddate", ISODate("1970-01-01T00:00:00.000Z") ] },
                1000 * 60 * 60 * 24
            ]}
        ]
    },
    "users": { "$addToSet": "$user"},
    "totalviews": { "$sum": 1 }
}},
{ "$sort": { "_id": -1 } }
])

结果是:

{
    "result" : [ 
        {
            "_id" : ISODate("2015-07-08T00:00:00.000Z"),
            "users" : [ 
                {
                    "id" : "65585",
                    "cookie" : "spzSznyfDeeFMptiKZqqDg"
                }, 
                {
                    "id" : null,
                    "cookie" : "spzSznyfDeeFMptiKZqqDg"
                }
            ],
            "totalviews" : 3
        }, 
        {
            "_id" : ISODate("2015-07-07T00:00:00.000Z"),
            "users" : [ 
                {
                    "id" : null,
                    "cookie" : "spzSznyfDeeFMptiKZqqDg"
                }, 
                {
                    "id" : "65585",
                    "cookie" : "spzSAAAAAAAAAAMptiKZqqDg"
                }, 
                {
                    "id" : "65585",
                    "cookie" : "spzSznyfDeeFMptiKZqqDg"
                }
            ],
            "totalviews" : 19
        }
    ],
    "ok" : 1
}

但我需要这样的结果:

{
    "result" : [ 
        {
            "_id" : ISODate("2015-07-08T00:00:00.000Z"),
            "userscount" : 2,
            "totalviews" : 3
        }, 
        {
            "_id" : ISODate("2015-07-07T00:00:00.000Z"),
            "userscount" : 3,
            "totalviews" : 19
        }
    ],
    "ok" : 1
}

不知道如何在 mongodb 中执行它。

使用$size运算符获取用户数组中的项目总数:

db.objects.aggregate([
    {"$match": {createddate: {$gt : ISODate("2015-07-01T00:00:00.000Z"), $lte : ISODate("2015-07-15T00:00:00.000Z")}} },
    {"$match": {object_id: '1'}},
    {"$group": {
        "_id": {
            "$subtract": [
                "$createddate",
                { "$mod": [
                    { "$subtract": [ "$createddate", ISODate("1970-01-01T00:00:00.000Z") ] },
                    1000 * 60 * 60 * 24
                ]}
            ]
        },
        "users": { "$addToSet": "$user"},
        "totalviews": { "$sum": 1 }
    }},
    { 
        "$project": {
            "totalviews": 1,
            "userscount": { "$size": "$users" }
        }
    },
    { "$sort": { "_id": -1 } }
])