mongodb3.2系统性学习——1、文档插入insert insertOne insertMany

  • 写操作——添加操作

mongodb提供以下操作执行添加文档操作

  • db.collection.insertOne() 3.2新添加
  • db.collection.insertMany() 3.2 新添加
  • db.collection.insert()
  • 首先介绍下 insertone() 操作

语法规则:

db.collection.insertOne(
   <document>,
   {
      writeConcern: <document>   //Optional. A document expressing the write concern. Omit to use the default write concern.
   }
)

关于 writeconcern 后边章节会详细介绍

返回值:

A document containing:

  • A boolean acknowledged as true if the operation ran with write concern or false if write concern was disabled.
  • A single element insertedId with the _id of the inserted document.

注意:

集合不存在该操作会创建集合。

 该操作不支持 db.collection.explain() 查询计划 可以使用insert 代替。

实例:

try {
   db.products.insertOne( { item: "card", qty: 15 } );
};
catch (e) {
   print (e);
};

 返回值:

{
   "acknowledged" : true,
   "insertedIds" : [
      ObjectId("562a94d381cb9f1cd6eb0e1a"),
   ]
}

添加write concern选项之后   复制集

try {
   db.products.insertOne(
       { "item": "envelopes", "qty": 100, type: "Self-Sealing" },
       { writeConcern: { w : "majority", wtimeout : 100 } }; //w:majority,表示>1/2的节点有数据
   )
}
catch (e) {
   print (e);
}

如果超时返回结果实例

WriteConcernError({
   "code" : 64,
   "errInfo" : {
      "wtimeout" : true
   },
   "errmsg" : "waiting for replication timed out"
})
  • 介绍下 inserMany() 操作  该操作是 3.2版本新添加的功能

语法规则:

db.collection.insertMany(
   { [ <document 1> , <document 2>, ... ] },//An array of documents to insert into the collection. 注意是数组
   {
      writeConcern: <document>,
      ordered: <boolean>   //Optional. A boolean specifying whether the mongod instance should perform an ordered or unordered insert. Defaults to true.   默认式按照顺序添加的    顺序添加的速度要慢于不按顺序添加的
   }
)

返回值:

A document containing:

  • A boolean acknowledged as true if the operation ran with write concern or false if write concern was disabled
  • An array of _id for each successfully inserted documents

注意:

  1. 每一组操作最大可以有1000个文档。
  2. 顺序添加的速度要慢于不按顺序添加的。
  3. 不存在的集合会自动创建。
  4. insertMany() 也不支持db.collection.explain() 可以使用insert 代替
  5. 如果添加出错会报出 BulkWriteError exception 异常,按照顺序添加的 操作遇到错误会直接停止,而不按照顺序的会继续执行在队列中的写操作。

实例:不指定 _id

try {
   db.products.insertMany( [
      { item: "card", qty: 15 },
      { item: "envelope", qty: 20 },
      { item: "stamps" , qty: 30 }
   ] );
}
catch (e) {
   print (e);
}

返回值:

{
   "acknowledged" : true,
   "insertedIds" : [
      ObjectId("562a94d381cb9f1cd6eb0e1a"),
      ObjectId("562a94d381cb9f1cd6eb0e1b"),
      ObjectId("562a94d381cb9f1cd6eb0e1c")
   ]
}

指定_id字段:

try {
   db.products.insertMany( [
      { _id: 10, item: "large box", qty: 20 },
      { _id: 11, item: "small box", qty: 55 },
      { _id: 12, item: "medium box", qty: 30 }
   ] );
}
catch (e) {
   print (e);
}

返回值:

{ "acknowledged" : true, "insertedIds" : [ 10, 11, 12 ] }

插入一个_id字段重复的字段:

try {
   db.products.insertMany( [
      { _id: 13, item: "envelopes", qty: 60 },
      { _id: 13, item: "stamps", qty: 110 },
      { _id: 14, item: "packing tape", qty: 38 }
   ] );
}
catch (e) {
   print (e);
}

返回值:   返回 BulkWriteError 异常  只会添加第一条数据

BulkWriteError({
   "writeErrors" : [
      {
         "index" : 0,
         "code" : 11000,
         "errmsg" : "E11000 duplicate key error collection: restaurant.test index: _id_ dup key: { : 13.0 }",
         "op" : {
            "_id" : 13,
            "item" : "envelopes",
            "qty" : 60
         }
      }
   ],
   "writeConcernErrors" : [ ],
   "nInserted" : 0,
   "nUpserted" : 0,
   "nMatched" : 0,
   "nModified" : 0,
   "nRemoved" : 0,
   "upserted" : [ ]
})

没有顺序添加操作:

try {
   db.products.insertMany( [
      { _id: 10, item: "large box", qty: 20 },
      { _id: 11, item: "small box", qty: 55 },
      { _id: 11, item: "medium box", qty: 30 },
      { _id: 12, item: "envelope", qty: 100},
      { _id: 13, item: "stamps", qty: 125 },
      { _id: 13, item: "tape", qty: 20},
      { _id: 14, item: "bubble wrap", qty: 30}
   ], { ordered: false } );
}
catch (e) {
   print (e);
}

返回值:  即使出现错误后续的字段也能正常添加进

BulkWriteError({
   "writeErrors" : [
      {
         "index" : 2,
         "code" : 11000,
         "errmsg" : "E11000 duplicate key error collection: inventory.products index: _id_ dup key: { : 11.0 }",
         "op" : {
            "_id" : 11,
            "item" : "medium box",
            "qty" : 30
         }
      },
      {
         "index" : 5,
         "code" : 11000,
         "errmsg" : "E11000 duplicate key error collection: inventory.products index: _id_ dup key: { : 13.0 }",
         "op" : {
            "_id" : 13,
            "item" : "tape",
            "qty" : 20
         }
      }
   ],
   "writeConcernErrors" : [ ],
   "nInserted" : 5,
   "nUpserted" : 0,
   "nMatched" : 0,
   "nModified" : 0,
   "nRemoved" : 0,
   "upserted" : [ ]
})

带着 写入安全级别writeconcern 跟 wtimeout

try {
   db.products.insertMany(
      [
         { _id: 10, item: "large box", qty: 20 },
         { _id: 11, item: "small box", qty: 55 },
         { _id: 12, item: "medium box", qty: 30 }
      ],
      { w: "majority", wtimeout: 100 }
   );
}
catch (e) {
   print (e);
}

返回值: If the primary and at least one secondary acknowledge each write operation within 100 milliseconds

{
   "acknowledged" : true,
   "insertedIds" : [
      ObjectId("562a94d381cb9f1cd6eb0e1a"),
      ObjectId("562a94d381cb9f1cd6eb0e1b"),
      ObjectId("562a94d381cb9f1cd6eb0e1c")
   ]
}

超时返回:

  • WriteConcernError({ "code" : 64, "errInfo" : { "wtimeout" : true }, "errmsg" : "waiting for replication timed out" })
  • 介绍下 inser() 操作

语法:

db.collection.insert(
   <document or array of documents>,  //数组或者文档都可以添加
   {
     writeConcern: <document>,
     ordered: <boolean> //跟insertMany()操作作用一致
   }
)

返回值:

时间: 2024-10-12 13:03:18

mongodb3.2系统性学习——1、文档插入insert insertOne insertMany的相关文章

Mongoose学习参考文档——基础篇

Mongoose学习参考文档 前言:本学习参考文档仅供参考,如有问题,师请雅正 一.快速通道 1.1 名词解释 Schema : 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力 Model : 由Schema发布生成的模型,具有抽象属性和行为的数据库操作对 Entity : 由Model创建的实体,他的操作也会影响数据库 注意: 1.本学习文档采用严格命名方式来区别不同对象,例如: var PersonSchema; //Person的文本属性 var PersonModel; //

Word 文档插入时间日期禁止自动更新

前些天写了点总结并插入时间和日期,记得勾掉了那个自动更新的,但是刚才打开时发现当时的日期和时间变成现在的了,我就纳闷了,然后我去看那插入日期和时间的那个框,里面确实没有勾选自动更新,于是百度, 百度都说只要把那个自动更新的勾去掉了就不会自动更新了,但是我的怎么就自动更新了呢? 是这样的,在你完成插入操作之前要把那个自动更新的勾去掉,再去插入时间和日期,这样插入的时间和日期就不会自动更新了,我当时是用的快捷键插入的时间和日期, 然后再去去掉那个自动更新的勾,这样其实没用了,记住在不需要自动更新时间

C#如何向word文档插入一个新段落及隐藏段落

向Word文档插入一个新段落的操作步骤 步骤1:新建一个文档并加载现有文档 Document document = new Document(); document.LoadFromFile(@"C:\Users\Administrator\Desktop\向日葵.docx", FileFormat.Docx); 步骤2:插入新段落并设置字体格式 Paragraph paraInserted = document.Sections[0].AddParagraph(); TextRang

HTML5学习之文档结构和语义(一)

<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> </head> <body> <!--he

怎么才能将Word文档插入到CAD中?

怎么才能将Word文档插入到CAD中?在日常的编辑CAD图纸的过程中,建筑设计师们会遇到许许多多的问题,但是这些问题有必须去解决它,对于CAD小白来说这也是一项非常困难的工作,比如说怎么才能将Word文档插入到CAD中?具体要怎么操作才能实现了?下面小编就来教教大家在迅捷CAD编辑器专业版中怎么才能将Word文档插入到CAD中?想要了解的朋友就一起来看看吧! 第一步:打开任意一个浏览器,在浏览器的搜索框中搜索迅捷CAD编辑器专业版,然后进入到迅捷CAD的官网,进去之后点击下载安装最新版本的CAD

使用typora+Picgo 实现文档插入自动上传图片

使用typora+Picgo 实现文档插入自动上传图片 本文主要参考这篇文章 前提: 已经下载安装PicGo这个软件,并且设置好图床,可以参考我之前写的文章<picgo+阿里云oss图床搭建> 安装最新版本的typora 在最新版的typora中,更新了自动上传图片至网络的功能,特别方便.如图,可以看到对应的版本号. 设置 安装好PicGo,并且配置好图床 在PicGo里设置服务器,按照图中的设置 设置typora,照如图的设置,上传服务里选用picgo-app,路径填写picgo的安装路径.

MongoDB快速入门学习笔记3 MongoDB的文档插入操作

1.文档的数据存储格式为BSON,类似于JSON.MongoDB插入数据时会检验数据中是否有“_id”域,如果没有会自动生成.shell操作有insert和save两种方法.当插入一条数据有“_id”值,并且现在集合中已经有相同的值,使用insert插入时插入不进去,使用save时,会更新数据. 1 > db.student.drop() 2 true 3 > db.student.insert({"_id": 1, "name":"zhang

从其它文档插入块

//SrcPath  源文件 String shortName = System.IO.Path.GetFileName(SrcPath); Database srcdb = new Database(false, true); srcdb.ReadDwgFile(SrcPath, FileShare.Read, false, ""); srcdb.CloseInput(true); //Document doc   要插入的文档, // Database srcdb 数据源 publ

Linux学习笔记(十三)--命令学习(文档的压缩与打包)

现在 1.网上下载的文件档都是压缩文件. 2.减少空间要用到压缩文件. 所以我们有必要学下怎么对文件的压缩与解压. linux 文档的压缩与打包命令 在linux中支持的压缩方式好多,但最常用的压缩方式是:     tar 命令 其压缩方式也有二种(gz & bz2)     现在我们要开始学习它的使用..... 命令 tar 功能 把文件进行打包与解包 语法 tar [-zjxcvfpP] filename 扩展 -z :是否同时用gzip压缩 -j :是否同时用bzip2压缩 -x :解包或