如何从mongodb获取关键字云?

时间:2015-07-17 07:05:35

标签: mongodb

我有以下格式的许多文件

{
    _id:...,
    words:["usa","canda","america", "colon"],
    owner:23
}
{
    _id:...,
    words:["chile","peru","argentina","america", "colon"],
    owner:23
}
{
    _id:...,
    words:["colon", "america", "britain", "mexico", "usa"],
    owner:23
}

所以,我需要所有者23的关键字云:

[
    {name:"america", hits:3},
    {name:"colon", hits:3},
    {name:"usa", hits:2},
    {name:"britain", hits:1},
    {...}
]

我的问题是我无法得到我想要的东西。 我怎么能得到? 感谢

1 个答案:

答案 0 :(得分:1)

使用 aggregation framework ,它会为您提供所需内容。聚合管道应该使用 $match 运算符作为第一步筛选值{23的owner键上的输入文档。 第二个管道步骤是 $unwind 运算符,它从输入文档解构words数组字段,并为下一个流输出每个元素的文档。每个输出文档都使用元素值替换数组。

为您提供关键字计数的管道阶段是 $group 运算符,它通过word键对上一个流中的输入文档进行分组,并应用累加器表达式 $sum ,返回每个组的总和。

最后一步, $project 运算符通过添加新字段name来重新整形流中的每个文档,该字段替换上一个流中的_id密钥。

最后,您的聚合管道将如下所示:

db.collection.aggregate([
    {
        "$match": { "owner": 23 }
    },
    {
        "$unwind": "$words"
    },
    {
        "$group": {
            "_id": "$words",
            "hits": {
                "$sum": 1
            }
        }
    },
    {
        "$project": {
            "_id": 0, "name": "$_id", "hits": 1
        }
    }
])