我有这样的文件:
{
"_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.$.score
和history.$.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();
您是否考虑过更好的文档结构来实现这一目标?