第四章 详解增删改查
对于数据库来说,如果我们不是DBA使用的最多的是CRUD,如果我们学好了CRUD,将来我们操作数据库中的数据的时候,将会得心应手。本章将会详细的介绍mongodb中的CRUD操作。
4.1 插入文档
对于数据库的CRUD操作,所有的都应该起源于C,如果没有C其他的几个也就没有意义了,所以我们先介绍一下C,也就是插入文档。
在mongodb中可以使用insert或者save方法或者update方法将一个数据插入到一个集合中。
对于insert来说,如果被插入数据字集合中不存在,能够正常插入,如果已经存在集合中,将会无法插入。insert方法语法如下:
db.collection.insert( <document> )
例如我们将一个用户插入到user集合中,代码如下:
> db.user.insert({name:"xiangyue",age:23})
> db.user.find()
{ "_id" : ObjectId("519cbddfe9c1b21d76cc927c"), "name" : "xiangyue", "age" : 23 }
在我们插入文档的时候,如果我们没有为该文档指定_id,mongodb将会为我们的文档自动创建一个不会重复的ObjectId,关于ObjectId的具体信息查看3.2Mongodb数据类型。
如果我们在insert中传入了多个文档,mongodb只会插入第一个文档,下面的代码中只插入了第一个文档。
> db.test.find()
> db.test.insert({name:"user1"},{name:"user2"}) 
> db.test.find()
{ "_id" : ObjectId("519cd757f83727a8baf0a8e2"), "name" : "user1" }
如果我们想一次插入多个文档,可以将多个文档组合成一个数组,这样就能够插入成功了,例子代码如下:
> db.test.find()
> db.test.insert([{name:"user1"},{name:"user2"}])
> db.test.find()
{ "_id" : ObjectId("519cd842f83727a8baf0a8e3"), "name" : "user1" }
{ "_id" : ObjectId("519cd842f83727a8baf0a8e4"), "name" : "user2" }
我们可以使用javascript批量插入数据。由于mongodb shell简单的说就是一个javascript shell所以javascript代码可以在mongodb shell中运行,所以我们可以使用javascript代码进行批量插入数据,例如我们插入10个用户到user集合中,代码如下:
> for(i=1;i<=10;i++){
... db.user.insert({_id:i,name:"user"+i,age:10+i})
... }
> db.user.find()
{ "_id" : ObjectId("519cbddfe9c1b21d76cc927c"), "name" : "xiangyue", "age" : 23 }
{ "_id" : 1, "name" : "user1", "age" : 11 }
{ "_id" : 2, "name" : "user2", "age" : 12 }
{ "_id" : 3, "name" : "user3", "age" : 13 }
{ "_id" : 4, "name" : "user4", "age" : 14 }
{ "_id" : 5, "name" : "user5", "age" : 15 }
{ "_id" : 6, "name" : "user6", "age" : 16 }
{ "_id" : 7, "name" : "user7", "age" : 17 }
{ "_id" : 8, "name" : "user8", "age" : 18 }
{ "_id" : 9, "name" : "user9", "age" : 19 }
{ "_id" : 10, "name" : "user10", "age" : 20 }

对于save方法,如果被插入数据不存在集合中,正常插入,如果存在,则更新该数据。save方法语法如下:
db.collection.insert( <document> )
例子代码:
> db.test.find()
{ "_id" : 1, "name" : "xiangyue", "age" : 23 }
{ "_id" : 2, "name" : "zhangsan", "age" : 23 }
> db.test.save({_id:3,name:"lisi",age:24}) /*集合中不存在,插入数据*/
> db.test.find()
{ "_id" : 1, "name" : "xiangyue", "age" : 23 }
{ "_id" : 2, "name" : "zhangsan", "age" : 23 }
{ "_id" : 3, "name" : "lisi", "age" : 24 }
> db.test.save({_id:3,name:"wangwu",age:25}) /*数据库中存在该数据,更新该数据*/
> db.test.find()
{ "_id" : 1, "name" : "xiangyue", "age" : 23 }
{ "_id" : 2, "name" : "zhangsan", "age" : 23 }
{ "_id" : 3, "name" : "wangwu", "age" : 25 }

对于update,我们看到这个方法我们想到的这个是更新一个文档的,怎么还能插入呢,但是官方就使update能够插入数据。Update方法有一个参数upsert参数,如果设置为true的话,如果被更新的文档不存在将会插入该文档,这个就类似save方法了。Upsert默认为false,所以默认情况下,如果查找不到需要更新的数据,则并不会更新该数据了。对于update方法这里只是简单给出一个例子代码,具体介绍请看4.4更新文档:
> db.test.find()
{ "_id" : 1, "name" : "xiangyue", "age" : 23 }
{ "_id" : 2, "name" : "zhangsan", "age" : 23 }
{ "_id" : 3, "name" : "wangwu", "age" : 26 }
> db.test.update({_id:4},{_id:4,name:"lisi",age:26})
> db.test.find()
{ "_id" : 1, "name" : "xiangyue", "age" : 23 }
{ "_id" : 2, "name" : "zhangsan", "age" : 23 }
{ "_id" : 3, "name" : "wangwu", "age" : 26 }
> db.test.update({_id:4},{_id:4,name:"lisi",age:26},{upsert:1}) /*设置了upsert为true后,数据不存在的时候插入了*/
> db.test.find()
{ "_id" : 1, "name" : "xiangyue", "age" : 23 }
{ "_id" : 2, "name" : "zhangsan", "age" : 23 }
{ "_id" : 3, "name" : "wangwu", "age" : 26 }
{ "_id" : 4, "name" : "lisi", "age" : 26 }
4.1.1不安全写操作
MongoDB为了追求赢得基准测试导致它默认以不安全的方式进行写操作。 如果你不调用getLastError(),MongoDB会在写操作实际完成之前就返回了,但是用户并不知道这次写操作失败了。所以使用mongodb的时候对于数据的完整性要求高的应用程序,需要调用getLastError方法,确认正确的写入了数据。

MongoDB自学笔记9---4.1 插入文档相关推荐

  1. 小白自学笔记——JAVA基础 1.5API文档说明

    名词解释: API(Application Programming Interface)应用程序编程接口,是Java提供的基本编程接口. Java语言提供了大量的基础类,因此 Oracle 也为这些基 ...

  2. mongodb插入文档时不传ObjectId

    type BookExt struct {ID bson.ObjectId `bson:"_id"`Title string `bson:"title"`Sub ...

  3. MongoDB 数据库、集合创建删除与文档插入

    本文章主要介绍mongodb的基本命令,前提条件,你的本地已经安装了mongo. 一.基本命令使用(主要是创建,增删改.) 0.mongoDb统计信息 获得关于MongoDB的服务器统计,需要在Mon ...

  4. 在.NET Core中使用MongoDB明细教程(1):驱动基础及文档插入

    MongoDB,被归类为NoSQL数据库(其实我更觉得MongoDb是介于关系型数据库和非关系型数据库之间,此外,在我看来在很多场景中MongoDb都可以取代关系型数据库.),是一个以类JSON格式存 ...

  5. MongoDB 插入文档

    文档的数据结构和JSON基本一样. 所有存储在集合中的数据都是BSON格式. BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON. 插入文档 MongoDB 使用 inse ...

  6. MongoDB插入文档

    db.collection.insertOne() 插入单个文档. db.collection.insertMany() 插入多个文档. db.collection.insert() 插入单/多个文档 ...

  7. MongoDB 自学笔记(入门级教程)

    MongoDB 插入 /*向数据库插入文档db.<collection>.insert()- 向集合中插入一个或多个文档- 当我们向集合中插入文档时,如果没有给文档指定_id属性,则数据库 ...

  8. MongoDB自学笔记8--- 3.3 MongoDB Shell简介及简单使用

     3.3 MongoDB Shell简介及简单使用 mongoDB Shell是mongoDB自带的一个javascript shell,随mongoDB安装包一同发布.可以使用mongoDB she ...

  9. MongoDB学习系列 -- 数据库、集合、文档的CURD

    前面一篇章节我们已经对MongoDB的基本概念有了一个大概的了解,从今天开始,我们将进行更细粒度的学习,首先就是数据库.集合.文档的CURD操作. 为了便于操作,减少学习难度,我们这里使用javasc ...

最新文章

  1. AsyncLocal 与 async await
  2. Shell-通过shell启动Java类中的main方法 + 通过Shell启动jar包
  3. 单片机独立式按键c语言程序,(原创)51单片机C语言程序设计--速学教程实例(入门篇)之独立按键(查询)...
  4. Centos 7 配置 NFS
  5. 小数转换成二进制c语言,只写出了十进制小数转换成二进制的,求二进制小数转十进制的...
  6. 2020年什么编程语言最受欢迎,待遇最高?
  7. python如何连续查找字符串_在另一个字符串Python中多次查找字符串
  8. 8-5安装redis-sentinel
  9. 第一次面试且失败的经历
  10. Let 's watch TV
  11. html播放器参数,Windows Media Player网页播放器及其参数含义
  12. 小程序 40163_安卓微信登入codebeenused,error40163
  13. 电子海图浮标信息的计算和输入
  14. 面试运维宝典专栏的小伙伴,互联网老辛来给你送福利了
  15. java分布式框架-JDF
  16. 中国大学最卷的专业,让我读上了
  17. 三顾讯时--对讯时新闻发布系统的艰难突破
  18. 适合普通人的竞争策略
  19. eas系统服务器地址,金蝶eas服务器地址设置
  20. 全面解析电商促销系统

热门文章

  1. 1018 锤子剪刀布 C版本
  2. C语言float精解
  3. 大数据开启“互联网+统计”新模式
  4. python进行异常检测工具_异常检测以及开源工具简介
  5. 全球AMR引领者极智嘉,积极赋能Ariat供应链升级
  6. mysql左连接和内连接区别_MYSQL 左连接右连接和内连接的详解及区别
  7. hmr webpack 不编译_webpack - hmr热更新
  8. BZOJ 1176[Balkan2007]Mokia (cdq分治,矩阵加矩阵求和)
  9. uniapp 内嵌h5登录页面实现登录
  10. 百度富文本编辑器手机端预览插件开发