前言

插入是向MongoDB中添加数据的基本方法。对目标集使用insert方法来插入一条文档。这个方法会给文档增加一个”_id”属性(如果原来没有的话),然后保存到数据库中。

1、连接数据库,拿到集合firstCollection

MongoClient mClient = new MongoClient("10.211.55.8");

DB db = mClient.getDB("test");

DBCollection collection = db.getCollection("firstCollection");

2、插入一条文档

内容:name:user28,age:30,sex:1

Java方法内容:

BasicDBObject obj = new BasicDBObject();

obj.put("name", "user28");

obj.put("age", 30);

obj.put("sex", 1);

collection.insert(obj);

这样就成功插入了一条文档,插入后的内容如下所示:

{ "_id" : ObjectId("55bf285368084e1906793d7a"), "name" : "user28", "age" : 30, "sex" : 1 }

3、批量插入文档

当需要插入多条文档的时候,循环进行单条插入当然是可以,但是效率不高,MongoDB提供了批量插入的方法

内容1:name:user29,age:30,sex:1

内容2:name:user30,age:30,sex:1

Java方法内容:

List<DBObject> objs = new ArrayList<DBObject>();

objs.add(new BasicDBObject("name","user29").append("age", 30).append("sex", 1));

objs.add(new BasicDBObject("name","user30").append("age", 30).append("sex", 1));

collection.insert(objs);

这样就批量进行了插入。批量插入通过一次请求将数据传递给数据库,然后由数据库进行插入,比循环单条插入节省了每次进行请求的资源。

4、利用update方法插入

一般update用于更新文档,但是这个方法的upsert属性可以使得在没有查找到要更新的文档的时候插入一条新文档

public WriteResult update(DBObject query,

DBObject update,

boolean upsert,

boolean multi)

参数介绍:

query - the selection criteria for the update

update - the modifications to apply

upsert - when true, inserts a document if no document matches the update query criteria

multi - when true, updates all documents in the collection that match the update query criteria, otherwise only updates one

Java方法内容:

collection.update(new BasicDBObject("name","user31"),

new BasicDBObject("name","user31").append("sex", 1).append("age", 30)

,true,false);

5、通过save方法来插入

MongoDB中save也有插入的功能,但是和insert相比有些区别

1、save相当于根据不同条件去执行insert或者update功能(这个条件就是_id属性),而insert只有插入功能

2、save只能单条记录,如果有数组,需要遍历进行处理,而insert可以直接处理数组,所以在处理批量插入的时候insert效率会高很多

利用save方法插入文档,java方法内容:

BasicDBObject obj = new BasicDBObject("name","user30").append("age", 30);

collection.save(obj);

6、插入原理

当执行出入的时候,使用的驱动程序会将数据转换成BSON 的形式,然后送入数据库。数据库解析BSON内容,检查是否存在_id属性,如果没有则给予生成一个。然后就原样的将数据存入数据库中。由于MongoDB在插入数据的时候不执行代码,所以在这部分就杜绝了注入式攻击的可能

7、总结

插入文档有很多方式,但是在不同的条件下不同的方法有着不同的执行效率,所以需要根据实际的业务场景选择合适的方法

备注

文中节选了《MongoDB权威指南》的部分内容。

Java MongoDB插入的更多相关文章

  1. mongoDB 插入数据 用java实现

    import java.net.UnknownHostException; import com.mongodb.BasicDBObject; import com.mongodb.DB; impor ...

  2. 9.java 操作mongodb插入、读取、修改以及删除基础

    1 package mongodb; import java.net.UnknownHostException; import java.util.ArrayList; import java.uti ...

  3. Java mongodb api疑问之MongoCollection与DBCollection

    在学习Java mongodb api时发现,可以调用不同的java mongodb api来连接数据库并进行相关操作. 方式一: 该方式使用mongoClient.getDB("xxx&q ...

  4. Java MyBatis 插入数据库返回主键

    最近在搞一个电商系统中由于业务需求,需要在插入一条产品信息后返回产品Id,刚开始遇到一些坑,这里做下笔记,以防今后忘记. 类似下面这段代码一样获取插入后的主键 User user = new User ...

  5. Java 批量插入数据(Oracle)

    //批量添加20000条数据用时8秒. try {    String url = "jdbc:oracle:thin:@IP:1521:orcl"; // orcl为数据库的SI ...

  6. Mongodb插入记录

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

  7. Data Base MongoDB 插入时间不正确的问题

    关于mongodb插入时间不正确的问题 mongodb插入时间: 把本地时间转换为utc时间:  也就是比本地时间少8个小时: 读取的时候又会转换本地时间: 所有一般不需处理:

  8. Java + MongoDB Hello World Example--转载

    原文地址:http://www.mkyong.com/mongodb/java-mongodb-hello-world-example/ A simple Java + MongoDB hello w ...

  9. c# MongoDB插入和批量插入,插入原理

    在开发之前,选择MongoDb驱动是件很重要的事情.如果选择不好,在后期的开发的是件很费力的事情,因为我就遇到这样的问题.MongoDb驱动有几种比较流行驱动,官方驱动和samus是两种使用比较多的. ...

随机推荐

  1. 20165324 Java实验三 敏捷开发与XP实验

    20165324 Java实验三 敏捷开发与XP实验 一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:何春江 学号:20165324 指导教师:娄嘉鹏 实验日期:2018年4月16日 ...

  2. ADO是什么?

    ADO是一个组件,ADO不适于MFC但是可以在MFC里面使用.(ADO在1996年冬被发布.) 由于ADO在MFC使用的比较频繁,所以一些前辈将ADO的三个智能指针封装了. 之后就可以在MFC 更方便 ...

  3. Docker+.Net Core 的那些事儿-4.还有这种操作!?

    1.通过docker run -v命令映射工作目录 通过一系列上述操作,我们可以发现我们的发布是基于镜像的,也就是说,在后期的迭代过程中,如果有些代码修改,我们就不得不删除旧的容器和镜像,dotnet ...

  4. typeof instanceof 和 obj.constructor

     1.typeof用以获取一个变量或者表达式的类型,typeof一般只能返回如下几个结果: 'number','boolean','string','function'(函数),'object'(NU ...

  5. SQL.Mysql中Cast()函数的用法

    比起orcale,MySQL相比之下就简单得多了,只需要一个Cast()函数就能搞定.其语法为:Cast(字段名 as 转换的类型 ),其中类型可以为: CHAR[(N)] 字符型  DATE  日期 ...

  6. Rsync结合Inotify 实时同步配置(更新之前繁琐的传输认证)

    今天一位CU的友友根据之前介绍过 通过rsync+inotify-tools+ssh实现触发式远程实时同步  配置分发系统,但是由于认证繁琐,很容易出错,我今天重新整理了下,用rsync密码文件pas ...

  7. [pixhawk笔记]5-uORB消息传递

    本文主要内容翻译自官方文档:https://dev.px4.io/en/middleware/uorb.html 在前一篇笔记中使用uORB完成消息传递,实现了一个简单示例程序,本文将对uORB进行系 ...

  8. logstash运输器以及kibana的更多操作

    为了达到不会因为ELK中的某一项组件因为故障而导致整个ELK工作出问题,于是 将logstash收集到的数据存入到消息队列中如redis,rabbitMQ,activeMQ或者kafka,这里以red ...

  9. 20145240《网络对抗》MSF基础应用

    MSF基础应用 一个主动攻击,如ms08_067 启动msf search ms08_067,查找相应的漏洞,查询可攻击的模块. 根据上述漏洞的模块use exploit/windows/smb/ms ...

  10. Jquery2 基础核心

    学习要点: 1.代码风格 2.加载模式 3.对象互换 4.多个库之间的冲突 本节简单的介绍一下jQuery 一些核心的问题. 一.代码风格 在jQuery程序中,不管是页面元素的选择.内置的功能函数, ...