热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MongoDB计算集合中子字符串的出现次数-MongoDBcountoccurancesofasubstringinacollection

HelloImaMongoDbbeginner.IhaveadatabaseofaIRCchatlog.Thedocumentstructureisverysim

Hello I'm a MongoDb beginner. I have a database of a IRC chatlog. The document structure is very simple

你好,我是MongoDb初学者。我有一个IRC聊天记录的数据库。文档结构非常简单

{ 
    "_id" : ObjectId("000"), 
    "user" : "username", 
    "message" : "foobar foobar potato idontknow", 
    "time" : NumberLong(1451775601469)
}

I have thousands of these and I want to count the number of occurrences of the string "foobar". I have googled this issue and found something about aggregations. I looks very complicated and I haven't really found any issue this "simple". I'd be glad if someone pointed me in the right direction what to research and I wouldn't mind an example command that does exactly this what I want. Thank you.

我有成千上万的这些,我想计算字符串“foobar”的出现次数。我搜索了这个问题并找到了有关聚合的内容。我看起来很复杂,我没有发现任何这个“简单”的问题。如果有人指出我正确的方向研究什么,我会很高兴,我不介意一个完全符合我想要的示例命令。谢谢。

1 个解决方案

#1


0  

There is no any built-in operator to solve your request.

没有任何内置运算符可以解决您的请求。

You can try this query, but it has very poor performance:

您可以尝试此查询,但性能非常差:

db.chat.find().forEach(function(doc){
    print(doc["user"] + " > " + ((doc["message"].match(/foobar/g) || []).length))
})

If you could change your message field to array, then we could apply aggregation...

如果您可以将消息字段更改为数组,那么我们可以应用聚合...

EDIT:

编辑:

If you add array of splitted words into your entry, we can apply aggregation

如果在条目中添加分割单词数组,我们可以应用聚合

Sample:

样品:

{
    "_id" : ObjectId("569bb7040586bcb40f7d2539"),
    "user" : "username",
    "fullmessage" : "foobar foobar potato idontknow",
    "message" : [ 
        "foobar", 
        "foobar", 
        "potato", 
        "idontknow"
    ],
    "time" : NumberLong(1451775601469)
}

Aggregation. We create new entry for each array element, match given word (foobar, in this case) and then count matched result.

聚合。我们为每个数组元素创建新条目,匹配给定的单词(在这种情况下为foobar),然后计算匹配的结果。

db.chat.aggregate([
    {"$unwind" : "$message"},
    {"$match" : {"message" : {"$regex" : "foobar", "$options" : "i"}}},
    {"$group" : {_id:{"_id" : "$_id", "user" : "$user", "time" : "$time", "fullmessage" : "$fullmessage"}, "count" : {$sum:1}}},
    {"$project" : {_id:"$_id._id", "user" : "$_id.user", "time" : "$_id.time", "fullmessage" : "$_id.fullmessage", "count" : "$count"}}
])

Result:

结果:

[ 
    {
        "_id" : ObjectId("569bb7040586bcb40f7d2539"),
        "count" : 2,
        "user" : "username",
        "time" : NumberLong(1451775601469),
        "fullmessage" : "foobar foobar potato idontknow"
    }
]

推荐阅读
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 在尝试对 QQmlPropertyMap 类进行测试驱动开发时,发现其派生类中无法正常调用槽函数或 Q_INVOKABLE 方法。这可能是由于 QQmlPropertyMap 的内部实现机制导致的,需要进一步研究以找到解决方案。 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 使用Maven JAR插件将单个或多个文件及其依赖项合并为一个可引用的JAR包
    本文介绍了如何利用Maven中的maven-assembly-plugin插件将单个或多个Java文件及其依赖项打包成一个可引用的JAR文件。首先,需要创建一个新的Maven项目,并将待打包的Java文件复制到该项目中。通过配置maven-assembly-plugin,可以实现将所有文件及其依赖项合并为一个独立的JAR包,方便在其他项目中引用和使用。此外,该方法还支持自定义装配描述符,以满足不同场景下的需求。 ... [详细]
  • 本文总结了JavaScript的核心知识点和实用技巧,涵盖了变量声明、DOM操作、事件处理等重要方面。例如,通过`event.srcElement`获取触发事件的元素,并使用`alert`显示其HTML结构;利用`innerText`和`innerHTML`属性分别设置和获取文本内容及HTML内容。此外,还介绍了如何在表单中动态生成和操作``元素,以便更好地处理用户输入。这些技巧对于提升前端开发效率和代码质量具有重要意义。 ... [详细]
  • C语言中全部可用的数学函数有哪些?2.longlabs(longn);求长整型数的绝对值。3.doublefabs(doublex);求实数的绝对值。4.doublefloor(d ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • 本文探讨了C语言和C++中大小写的处理方式,并详细介绍了如何在C++中实现不区分大小写的字符串比较。通过自定义`char_traits`类,可以灵活地处理字符的比较、复制和转换。 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • com.hazelcast.config.MapConfig.isStatisticsEnabled()方法的使用及代码示例 ... [详细]
  • HBase Java API 进阶:过滤器详解与应用实例
    本文详细探讨了HBase 1.2.6版本中Java API的高级应用,重点介绍了过滤器的使用方法和实际案例。首先,文章对几种常见的HBase过滤器进行了概述,包括列前缀过滤器(ColumnPrefixFilter)和时间戳过滤器(TimestampsFilter)。此外,还详细讲解了分页过滤器(PageFilter)的实现原理及其在大数据查询中的应用场景。通过具体的代码示例,读者可以更好地理解和掌握这些过滤器的使用技巧,从而提高数据处理的效率和灵活性。 ... [详细]
  • 寻找最长无重复字符的子字符串 ... [详细]
  • 在使用 `useSelector` 选择器时,发现分派操作后状态未能实时更新。这可能是由于 React 组件的渲染机制或 Redux 的状态管理问题导致的。建议检查 `useSelector` 的依赖项和 `dispatch` 的调用时机,确保状态变化能够正确触发组件重新渲染。此外,可以考虑使用 `useEffect` 钩子来监听状态变化,以确保及时更新。 ... [详细]
author-avatar
520那孩HAPPY
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有