Mongo Update值,在数组内的数组内进行聚合

时间:2014-10-01 10:09:34

标签: mongodb mongodb-query aggregation-framework

我有这样的文件:

{
        "_id" : 1,
        "bMeta" : [
                "c33b9ce5ca46075336134a8092bebbbf"
        ],
        "ip" : [
                "a17bdc3ee98c002570b032dfe67f9680"
        ],
        "history" : [
                {
                        "type" : "pType",
                        "name" : "home",
                        "score" : 0,
                        "seen" : [
                                {
                                        "year" : 2014,
                                        "week" : 40,
                                        "score" : 0
                                },
                                {
                                        "year" : 2013,
                                        "week" : 51,
                                        "score" : 0
                                }
                        ]
                }
        ]
}

我想更新($ inc)'得分' history.$.scorehistory.$.seen.$.score的值seen.year = 2014。

当然,我不能使用多个$,所以它不能像那样工作。它只是为了表明我需要做什么。

你会如何更新它?知道主要目标是能够通过以下方式聚合价值:

db.users.aggregate([
    {
        '$match':
        {
            '_id' : 1
        }
    },
    { '$unwind': '$history' },
    {
        '$match':
        {
            'history.type' : 'pType',
            'history.name' : 'home'
        }
    },
    { '$unwind': '$history.seen' },
    { '$match': { 'history.seen.year' : 2014 } },
    { '$match': { 'history.seen.week' : { $gte: 27 } } },
    { '$group': { _id: '$history.name', total_recent_score: { "$sum": "$history.seen.score" } } },
    { '$sort': { total_recent_score: -1 } },
    { '$limit': 5 }
]).pretty();

您是否考虑过更好的文档结构来实现这一目标?

0 个答案:

没有答案