MongoDB 教程,MongoDB 在线

1211MongoDB 固定集合

db.createCollection("cappedLogCollection",{capped:true,size:10000,max:1000})

size 是整个集合空间大小,单位为【KB】

max 是集合文档个数上线,单位是【个】

如果空间大小到达上限,则插入下一个文档时,会覆盖第一个文档;如果文档个数到达上限,同样插入下一个文档时,会覆盖第一个文档。两个参数上限判断取的是【与】的逻辑。

1210MongoDB 管理工具

Navicat for MongoDB也是一个MongoDB管理工具,是客户端,需要安装。

通过Navicat for MongoDB你同样可以管理 MongoDB服务,数据库,集合,文档,索引等等。

它提供了非常人性化的操作。类似 Navicat for MySQL(MySql管理工具)。

了解Navicat for MongoDB : https://www.navicat.com.cn/products/navicat-for-mongodb

Navicat for MongoDB 下载地址:https://www.navicat.com.cn/products

1209MongoDB 正则表达式

regex操作符的介绍

MongoDB使用$regex操作符来设置匹配字符串的正则表达式,使用PCRE(Pert Compatible Regular Expression)作为正则表达式语言。

  • regex操作符
    • {<field>:{$regex:/pattern/,$options:’<options>’}}
    • {<field>:{$regex:’pattern’,$options:’<options>’}}
    • {<field>:{$regex:/pattern/<options>}}
  • 正则表达式对象
    • {<field>: /pattern/<options>}

$regex与正则表达式对象的区别:

  • 在$in操作符中只能使用正则表达式对象,例如:{name:{$in:[/^joe/i,/^jack/}}
  • 在使用隐式的$and操作符中,只能使用$regex,例如:{name:{$regex:/^jo/i, $nin:['john']}}
  • 当option选项中包含X或S选项时,只能使用$regex,例如:{name:{$regex:/m.*line/,$options:"si"}}

$regex操作符的使用

$regex操作符中的option选项可以改变正则匹配的默认行为,它包括i, m, x以及S四个选项,其含义如下

  • i 忽略大小写,{<field>{$regex/pattern/i}},设置i选项后,模式中的字母会进行大小写不敏感匹配。
  • m 多行匹配模式,{<field>{$regex/pattern/,$options:'m'},m选项会更改^和$元字符的默认行为,分别使用与行的开头和结尾匹配,而不是与输入字符串的开头和结尾匹配。
  • x 忽略非转义的空白字符,{<field>:{$regex:/pattern/,$options:'m'},设置x选项后,正则表达式中的非转义的空白字符将被忽略,同时井号(#)被解释为注释的开头注,只能显式位于option选项中。
  • s 单行匹配模式{<field>:{$regex:/pattern/,$options:'s'},设置s选项后,会改变模式中的点号(.)元字符的默认行为,它会匹配所有字符,包括换行符(\n),只能显式位于option选项中。

使用$regex操作符时,需要注意下面几个问题:

  • i,m,x,s可以组合使用,例如:{name:{$regex:/j*k/,$options:"si"}}
  • 在设置索弓}的字段上进行正则匹配可以提高查询速度,而且当正则表达式使用的是前缀表达式时,查询速度会进一步提高,例如:{name:{$regex: /^joe/}

1208MongoDB Map Reduce

临时集合参数是这样写的

out: { inline: 1 }

设置了 {inline:1} 将不会创建集合,整个 Map/Reduce 的操作将会在内存中进行。

注意,这个选项只有在结果集单个文档大小在16MB限制范围内时才有效。

 db.users.mapReduce(map,reduce,{out:{inline:1}});

1207MongoDB 数据库引用

>db[dbRef.$ref].findOne({"_id":(dbRef.$id)})

在 MongoDB4.0 版本是这样写:

>db[dbRef.$ref].findOne({"_id":ObjectId(dbRef.$id)})