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并不是一次返回结果集中的所有文档,而是以多条文档的形式分批来返回查询结果,返回的文档会缓存到内存中。

游标函数

手动迭代游标示例

java 复制代码
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> } }
相关推荐
晋阳十二夜5 小时前
【压力测试之_Jmeter链接Oracle数据库链接】
数据库·oracle·压力测试
GDAL6 小时前
Node.js v22.5+ 官方 SQLite 模块全解析:从入门到实战
数据库·sqlite·node.js
DCTANT7 小时前
【原创】国产化适配-全量迁移MySQL数据到OpenGauss数据库
java·数据库·spring boot·mysql·opengauss
AI、少年郎9 小时前
Oracle 进阶语法实战:从多维分析到数据清洗的深度应用(第四课)
数据库·oracle
赤橙红的黄9 小时前
自定义线程池-实现任务0丢失的处理策略
数据库·spring
DataGear10 小时前
如何在DataGear 5.4.1 中快速制作SQL服务端分页的数据表格看板
javascript·数据库·sql·信息可视化·数据分析·echarts·数据可视化
weixin_4383354010 小时前
分布式锁实现方式:基于Redis的分布式锁实现(Spring Boot + Redis)
数据库·redis·分布式
码不停蹄的玄黓10 小时前
MySQL Undo Log 深度解析:事务回滚与MVCC的核心功臣
数据库·mysql·undo log·回滚日志
Qdgr_10 小时前
价值实证:数字化转型标杆案例深度解析
大数据·数据库·人工智能
数据狐(DataFox)10 小时前
SQL参数化查询:防注入与计划缓存的双重优势
数据库·sql·缓存