计算两个字段与MongoDB匹配时的总发生次数

计算两个字段与MongoDB匹配时的总发生次数,mongodb,nosql,Mongodb,Nosql,我试图在mongo数据库中查找两个字段匹配的总次数。我目前正在计算一个字段的总数,但不知道如何在匹配时计算。我的数据示例如下: |艺术家|宋|演奏 |艺人1 |简介|是 |艺人2 |歌曲1 |是 |艺人1 |简介|否 |艺人3 |简介|是 |艺人1 |简介|是 因此,目前,我可以让它计算数据库中存在歌曲标题“intro”的总次数,但我希望它能够与artist1名为“intro”的歌曲和artist2名为“intro”的歌曲有所不同 我目前拥有的代码是: db.music.aggregate([{

我试图在mongo数据库中查找两个字段匹配的总次数。我目前正在计算一个字段的总数,但不知道如何在匹配时计算。我的数据示例如下:

|艺术家|宋|演奏

|艺人1 |简介|是

|艺人2 |歌曲1 |是

|艺人1 |简介|否

|艺人3 |简介|是

|艺人1 |简介|是

因此,目前,我可以让它计算数据库中存在歌曲标题“intro”的总次数,但我希望它能够与artist1名为“intro”的歌曲和artist2名为“intro”的歌曲有所不同

我目前拥有的代码是:

db.music.aggregate([{$sortByCount:$song}])

然后输出

简介:4

歌曲1:1

但我不知道如何更改查询以将其显示为:

艺术家1,简介:3

艺术家3,简介:1

任何帮助都将不胜感激

还有,有没有办法只计算“播放”字段等于“是”的时间

再次感谢


艺术家2,歌曲1:1

假设这些是您的文档:

/* 1 */
{
    "artist" : "artist1",
    "song" : "intro",
    "played" : "yes"
}

/* 2 */
{
    "artist" : "artist2",
    "song" : "song1",
    "played" : "yes"
}

/* 3 */
{
    "artist" : "artist1",
    "song" : "intro",
    "played" : "no"
}

/* 4 */
{
    "artist" : "artist3",
    "song" : "intro",
    "played" : "yes"
}

/* 5 */
{
    "artist" : "artist1",
    "song" : "intro",
    "played" : "yes"
}
此查询将为您提供每个艺术家的每首歌曲的计数:

db.getCollection('test').aggregate([{"$match":{"played":"yes"}},
{"$group":{_id:{"song":"$song","artist":"$artist"},"count":{"$sum":1}}},
{"$project":{"song":"$_id.song","artist":"$_id.artist","count":1,"_id":0}}
])
结果:

/* 1 */
{
    "count" : 1.0,
    "song" : "intro",
    "artist" : "artist3"
}

/* 2 */
{
    "count" : 1.0,
    "song" : "song1",
    "artist" : "artist2"
}

/* 3 */
{
    "count" : 2.0,
    "song" : "intro",
    "artist" : "artist1"
}
要仅获取播放歌曲的计数,只需在如下匹配阶段中添加
{“播放”:“yes”}

db.getCollection('test').aggregate([{"$match":{"played":"yes"}},
{"$group":{_id:{"song":"$song","artist":"$artist"},"count":{"$sum":1}}},
{"$project":{"song":"$_id.song","artist":"$_id.artist","count":1,"_id":0}}
])

我有点难以解释,但在这种情况下,我将使用它,我不知道歌曲的名称,所以我希望它能够计数两列,如果这是有意义的。它会返回一些东西:“艺术家1-介绍,3”,“艺术家2-歌曲1,1”,“艺术家3-介绍,1”因为我拥有的数据库由一些人的音乐库播放历史组成,其中记录了他们每次播放歌曲的情况。我试图找到他们播放次数最多的歌曲,但由于一些艺术家有同名歌曲,我需要它在计数时检查艺术家的姓名。如果那样的话sense@Sam我已经更新了答案。检查这是否有帮助。