string - 在整个集合的字符串字段中查找最常用的词

标签 string mongodb mapreduce aggregation-framework mongodb-aggregation

假设我有一个类似于以下内容的 Mongo 集合:

[
  { "foo": "bar baz boo" },
  { "foo": "bar baz" },
  { "foo": "boo baz" }
]

是否可以确定哪些词在 foo 字段中出现的频率最高(最好使用计数)?

例如,我喜欢这样的结果集:

[
  { "baz" : 3 },
  { "boo" : 2 },
  { "bar" : 2 }
]

最佳答案

最近关闭了一个JIRA issue关于在聚合框架的 $project 阶段使用的 $split 运算符。
有了它,您就可以创建这样的管道

db.yourColl.aggregate([
    {
        $project: {
            words: { $split: ["$foo", " "] }
        }
    },
    {
        $unwind: {
            path: "$words"
        }
    },
    {
        $group: {
            _id: "$words",
            count: { $sum: 1 }
        }
    }
])

结果是这样的

/* 1 */
{
    "_id" : "baz",
    "count" : 3.0
}

/* 2 */
{
    "_id" : "boo",
    "count" : 2.0
}

/* 3 */
{
    "_id" : "bar",
    "count" : 2.0
}

关于string - 在整个集合的字符串字段中查找最常用的词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38750429/

相关文章:

C++:无法使用类型为 'char**' 的右值初始化类型为 'char*[x]' 的变量

c - 每行打印一个字

php - Laravel 5.3 + MongoDB 库中的 hasMany 关系问题 'jenssegers/laravel-mongodb'

hadoop - 如何使用 MultipleTextOutputFormat 类将默认输出文件重命名为一些有意义的名称?

hadoop - 如何将没有任何分隔符的字符串转换为逗号分隔的字符串?

javascript - 在JavaScript中的字符处拆分字符串

django - 我应该为大型文本文件选择哪个数据库

r - 使用 rmongodb 将 mongo objectid 转换为字符串

hadoop - hadoop 映射操作如何管理 HDFS 集群上的数据冗余?

java - Pig latin 程序,switch/else 错误