文章目录
- MongoDB文档插入
- 对比增删改查
- 文档插入
- MongoDB写安全机制
- 非确认式写入
- MongoDB文档查询
- 参数说明
- 查询操作符
- 比较查询操作符
- 逻辑查询操作符
- 元素查询操作符
- 数组查询操作符
- 模糊查询
- 区别:
- $regex操作符中的option选项
- MongoDB游标介绍
- 游标函数
- 手动迭代游标示例
- 游标介绍
MongoDB文档插入
对比增删改查
文档插入
- 参数说明:
- document:要写入的文档。
- writeConcern:可选,写入策略,默认为 1,即要求确认写操作,0 是不要求。
- ordered:可选,指定是否按顺序写入,默认 true,按顺序写入
- db.collection.insertOne() 用于向集合插入一个新文档
- 语法格式如下:db.collection.insertOne(,{writeConcern:} )
- db.collection.insertMany() 用于向集合插入多个文档
- 语法格式如下:db.collection.insertMany([<document 1>,<document 2>, … ],{writeConcern:,ordered: })
MongoDB写安全机制
- 写入安全机制(Write Concern)是一种由客户端设置的,用于控制写入安全级别的机制,通过使用写入安全机制可以提高数据的可靠性。
- MongoDB提供了四种写入级别,分别是:
- 非确认式写入
- 确认式写入
- 日志写入
- 复制集确认式写入
非确认式写入
写操作不会返回任何结果,对于写操作,在没有得到服务器写入确认的情况下就立即返回,所以无法知道是否写入成功。
MongoDB文档查询
参数说明
- query :可选,使用查询操作符指定查询条件
- projection :可选,是否返回该字段,0代表不返回,1代表返回,语法格式:{field:0}或{field:1},查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。db.student.find({“age”:{$lt:22}},{“_id”:0, “name”:1})
- options:可选,指定查询的其他选项,这些选项能够改变查询的行为和返回的结果。
- limit指定查询返回结果数量的上限skip:跳过一定数据量的结果,设置第一条返回文档的偏移量
- sort:对查询结果进行排序
- find参数为空或者查询条件为空文档时,会返回集合中所有的文档。例如:db.student.find()或db.student.find({})
- 如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:db.col.find().pretty()
- findOne()只会返回第一条数据
查询操作符
比较查询操作符
逻辑查询操作符
元素查询操作符
数组查询操作符
- 查询数组中的元素(普通元素),包含两种情况:
- 与位置无关,查询数组中含有某个值的元素,例如:db.student.find({score: 60})
- 与位置有关,按照指定的数组索引查询数组元素的值(使用点号操作符) 例如:db.student.find({‘scores.2’: 60})
- 数组元素是文档时,包含两种情况:
- 与位置无关,查询数组中满足条件的子文档元素,例如:db.student.find({“score.成绩”:80})
- 与位置有关,按照指定的数组索引查询数组子文档,例如:db.student.find({“scores.2.成绩”:95})
模糊查询
regex操作符
{:{$ regex:/pattern/,$ options:‘’}}
{:{$ regex:‘pattern’,$ options:‘’}}
{:{$ regex:/pattern/}}
正则表达式对象
{: /pattern/}
区别:
- 在$ 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操作符中的option选项
可以改变正则匹配的默认行为,它包括i, m, x以及s四个选项,其含义如下:
- i 忽略大小写 {{$regex/pattern/i}}
- 设置i选项后,模式中的字母会进行大小写不敏感匹配。
- m 多行匹配模式,{{$ regex/pattern/,$options:'m’}
- m选项会更改^和$元字符的默认行为,分别使用与行的开头和结尾匹配,而不是与输入字符串的开头和结尾匹配。
- x 忽略非转义的空白字符:{$ regex:/pattern/,$options:'x‘}
- 设置x选项后,正则表达式中的非转义的空白字符将被忽略,同时#被解释为注释的开头 注:只能显式位于option选项中。
- s 单行匹配模式{:{$ regex:/pattern/,$options:'s‘}
- 设置s选项后,会改变模式中的点号(.)元字符的默认行为,它会匹配所有字符,包括换行符(\n),只能显式位于option选项中。
- i,m,x,s可以组合使用例如:{name:{ r e g e x : / j ∗ k / , regex:/j*k/, regex:/j∗k/,options:“si”}}
- 在设置索引的字段上进行正则匹配可以提高查询速度,而且当正则表达式使用的是前缀表达式时,查询速度会进一步提高 例如:{name:{$regex: /^joe/}
MongoDB游标介绍
用find函数进行查询时,MongoDB并不是一次返回结果集中的所有文档,而是以多条文档的形式分批来返回查询结果,返回的文档会缓存到内存中。
游标函数
手动迭代游标示例
var myCursor = db.users.find( { type: 2 } );
while (myCursor.hasNext()) {
printjson(myCursor.next());
}
或var myCursor = db.users.find( { type: 2 } );
myCursor.forEach(printjson);
游标介绍
- 默认情况下,服务器将在闲置10分钟后或客户端遍历完后自动关闭游标。 如果要取消游标超时自动销毁,可以使用cursor.noCursorTimeout()方法
- 设置noCursorTimeout选项后,必须使用cursor.close()手动关闭游标,或者遍历完游标的结果。
- db.serverStatus() 方法返回的文档中包含了metrics字段,metrics字段中的cursor字段包含了游标的一些信息
- 自上次服务器重新启动以来超时的游标数
- 设置了选项DBQuery.Option.noTimeout的打开游标的数量,以防止一段时间不活动后发生超时
- "固定"打开游标的数量
- 打开的游标总数
db.serverStatus().metrics.cursor { "timedOut" : <number> "open" : { "noTimeout" : <number>, "pinned" : <number>, "total" : <number> } }