前言
插入是向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权威指南》的部分内容。