2

現在作業中のプロジェクトでmongoの問題があり、あなたの助けが必要です。

以下は私の問題です:

ユーザーログデータをサンプルとして保存しました:

db.visitors コレクション

 [
    {
        uid: "0001",
        logPath: "/home",
        logTime: "Mon Dec 27 2010 18:51:22 GMT+0000 (UTC)"
    },
    {
        uid: "0002",
        logPath: "/",
        logTime: "Mon Dec 27 2010 18:51:22 GMT+0000 (UTC)"
    },
    {
        uid: "0001",
        logPath: "/product",
        logTime: "Mon Dec 27 2010 18:51:23 GMT+0000 (UTC)"
    },
    {
        uid: "0001",
        logPath: "/order",
        logTime: "Mon Dec 28 2010 18:51:23 GMT+0000 (UTC)"
    }
]

そして、訪問ユーザーを日付別にグループ化する必要があります (2010 年 12 月 28 日月曜日から 2010 年 12 月 27 日月曜日まで)

uid が 0001 でグループのユーザーのログを検索してみてください。

[
    {
        date: "Mon Dec 28",
        log: [
            {
                logPath: '/order'
            }
        ]
    },
    {
        date: "Mon Dec 27",
        log: [
            {
                logPath: '/home'
            },
            {
                logPath: '/product'
            }
        ]
    }
]

グループ化する方法を教えてください

4

1 に答える 1

1
db.aggregate([
    {$match: {uid: "0001", logTime: {$gte: ISODate('Mon Dec 27 2010'), $lt: ISODate("Mon Dec 29 2010")}}},
    {$project: 
        {day: {'$dayOfMonth': '$logTime'},month: {'$month':'$logTime'},year: {'$year':'$logTime'} }
    },
    {$group: {
        _id: {day:'$day',month:'$month',year:'$year'},
        log: {$push:{logPath:'$logPath'}}
    }}
])

そのような何かがうまくいくはずです。月だけでグループ化したい場合は、のdayからフィールドを取り出すことができます。_id$group

デートを行う別の方法がありますが、現時点ではおそらくこの方法が最も簡単であることを認めなければなりません。

于 2013-07-02T10:25:28.373 に答える