相关疑难解决方法(0)

MongoDB由数组内部元素组成

我有一个文章列表,每个文章都有一个数组属性,列出了其中提到的各个人:

_id: {
    $oid: "52b632a9e4f2ba13c82ccd23"
},
providerName: "The Guardian",
url: "http://feeds.theguardian.com/c/34708/f/663860/s/3516cebc/sc/38/l/0L0Stheguardian0N0Cmusic0C20A130Cdec0C220Cwaterboys0Efishermans0Eblues0Etour0Ehammersmith/story01.htm",
subject: "The Waterboys – review",
class_artist: [
    "paul mccartney"
]
Run Code Online (Sandbox Code Playgroud)

我一直在努力(不成功)class_artist根据他们在过去7天内被标记的文章数量来获取所有个体艺术家的列表().

我已经达到了:

var date = new Date();
date.setDate(date.getDate() - 7);

db.articles.group({
    key: { class_artist: 1 },
    cond: { class_date: { $gt: date } },
    reduce: function ( curr, result ) { result.cnt++; },
    initial: { cnt : 0 }
}).sort({cnt: -1});
Run Code Online (Sandbox Code Playgroud)

但不幸的是,它并不是基于单个数组值来计算它们,而是基于数组合成(即艺术家列表).

我尝试使用该$unwind功能,但无法使其工作.

mongodb mongodb-query aggregation-framework

38
推荐指数
1
解决办法
4万
查看次数

获取聚合中嵌套数组的总和

好吧,我有一个似乎无法解决的问题。

我有一个这样的文档:

{
  "playerId": "43345jhiuy3498jh4358yu345j",
  "leaderboardId": "5b165ca15399c020e3f17a75",
  "data": {
    "type": "EclecticData",
    "holeScores": [
      {
        "type": "RoundHoleData",
        "xtraStrokes": 0,
        "strokes": 3,
      },
      {
        "type": "RoundHoleData",
        "xtraStrokes": 1,
        "strokes": 5,
      },
      {
        "type": "RoundHoleData",
        "xtraStrokes": 0,
        "strokes": 4
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,我想要完成的是使用笔画的总和,然后再进行排序。我正在尝试这个:

var sortedBoard = db.collection.aggregate(
    {$match: {"leaderboardId": boardId}},
    {$group: {
        _id: "$playerId",
        played: { $sum: 1 },
        strokes: {$sum: '$data.holeScores.strokes'}
        }
    },
    {$project:{ 
        type: "$SortBoard",
        avgPoints: '$played',
        sumPoints: "$strokes",
        played : '$played'
    }}
);
Run Code Online (Sandbox Code Playgroud)

这里的问题是我确实得到了正确的笔划总和,因为这是在另一个数组内。

希望有人可以帮助我,并提前致谢:-)

mongodb aggregation-framework

2
推荐指数
1
解决办法
1672
查看次数