源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

MongoDB正则表达式及应用

  • 时间:2021-07-02 03:20 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:MongoDB正则表达式及应用
正则表达式常用来在所有语言中搜索字符串的任何模式或文字。MongoDB还提供了正则表达式功能的字符串模式使用正则表达式$regex操作符。MongoDB使用PCRE(Perl兼容正则表达式)为正则表达式语言。 不同于文本搜索,我们不需要做任何配置或命令就能直接使用正则表达式。 考虑下包含文字后其标签的帖子集合,文档结构如以下:
{
 "post_text": "enjoy the mongodb articles on yiibai",
 "tags": [
  "mongodb",
  "yiibai"
 ]
}

[b]使用正则表达式表达[/b] 下面的正则表达式查询搜索所有包含字符串 yiibai.com 的帖子:
[url=http://www.lnmopy.com/]www.lnmopy.com[/url]", "site" : "website", "tag" : "l,n,m,o,p,y"} { "_id" : ObjectId("502dd63d16a25b1ff6000000"), "name" : "demo.lnmopy.com", "site" : "unknown", "tag" : "d,e,m,o"} { "_id" : ObjectId("502dd63d16a25b1ff6000000"), "name" : "welcome.lnmopy.com", "site" : "website", "tag" : "w,e,l,c,o,m,e"} mongodb的正则表达式仅支持i和m的javascript原生写法(如/*.lnmopy.com/i)。如果要是用x和s选项就必须使用“$regex”操作符并在“$options”中指定选项。 [b]使用正则表达式的更新操作: [/b] db.lnmopy.update( { 'name': /*.lnmopy.com/i }, { $set: { 'site':'www.lnmopy.com' } } ); 意思是,查找当前数据库中名为“lnmopy”的集合中“name”字段符合“/*.lnmopy.com/i”正则的条目,并只将“site”字段更新为“www.lnmopy.com”,该条更新语句仅更新一条数据,如果不是用$set,那么这条记录就会只剩下你更新的部分和默认的ObjectId,可以说是替换了。如果想替换所有,可以加入参数: db.lnmopy.update( { 'name': /*.lnmopy.com/i }, { $set: { 'site':'www.lnmopy.com' } } , false, true); 参数有顺序,false是upsert,如果没有就插入新的。true就是multi多条记录更新,所有匹配到的结果。或者直接指定{ multi: true }: db.lnmopy.update( { 'name': /*.lnmopy.com/i }, { $set: { 'site':'www.lnmopy.com' } } , { multi: true }); 这样就把所有的“site”字段全都更新为“www.lnmopy.com”了。 我设计的字段“tag”有个缺陷,就是本来是一个单词,现在每个字母都被“,“分隔开了。实际工作中也存在类似问题,由于批量转换数据,或者其他程序操作不当,或者业务需求更改等等原因需要对某些字段进行正则批量处理,mongodb的一般更新方法是不能实现的,这时就需要使用javascript语句。 正则表达式替换查询结果中','为” db.lnmopy.find().forEach( function(u) { u.tag = u.tag.replace(/\,/, ""); db.lnmopy.save(u); } ); 最后执行 db.lnmopy.find() 显示如下数据: { "_id" : ObjectId("502dd63d16a25b1ff6000000"), "name" : "[url=http://www.lnmopy.com/]www.lnmopy.com[/url]", "site" : "[url=http://www.lnmopy.com/]www.lnmopy.com[/url]", "tag" : "lnmopy"} { "_id" : ObjectId("502dd63d16a25b1ff6000000"), "name" : "demo.lnmopy.com", "site" : "[url=http://www.lnmopy.com/]www.lnmopy.com[/url]", "tag" : "demo"} { "_id" : ObjectId("502dd63d16a25b1ff6000000"), "name" : "welcome.lnmopy.com", "site" : "[url=http://www.lnmopy.com/]www.lnmopy.com[/url]", "tag" : "welcome"} 后记:javascript是mongodb的一大特色,也是优势,很多复杂的查询和处理都可以用javascript实现,要注意的是,javascript的工作效率较低,原则上应该尽量避免在主要业务逻辑中大量使用。类比的讲,javascript就相当于oracle的存储过程,介于10gen(mongodb的开发团队)是由oracle出来的这点,就一点也不奇怪了。关于如何使用更复杂的javascript,以后会写到。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部