MongoDB学习笔记Day2

MongoDB数据插入

  昨天学到,在MongoDB中插入数据,使用如下三种语句插入数据(类似于Mysql中的insert语句):

db.colletion1.insert({"huidong1":"huidong1"})
db.colletion2.insertOne({"huidong2":"huidong2"})
db.colletion3.insertMany([{"huidong3":"huidong3"},{"huidong4":"huidong4"}])

前面两条是等价的,后面一条用于插入多条数据。插入的数据,没有固定的限制(不像Mysql中规定了2个字段的表,插入的时候必须要插入一组两个字段的数据),比如:

db.colletion1.insert({"huidong5":"huidong5","name":"张三","age":18})
db.colletion3.insertMany([{"huidong6":"huidong6"},{"huidong7":"huidong7","name":"张三"}])

可以看到第一条语句我在colletion1集合中插入了一条和之前数据结构不相同的数据,在colletion3集合中插入了两组数据结构不相同的数据,都是可以成功的,使用db.colletion3.find()查询集合相关数据,可以看到数据正常存储:

> db.colletion3.find()
{ "_id" : ObjectId("5b723c36cf3a7a471b1d4adc"), "huidong3" : "huidong3" }
{ "_id" : ObjectId("5b723c36cf3a7a471b1d4add"), "huidong4" : "huidong4" }
{ "_id" : ObjectId("5b723c3ecf3a7a471b1d4ade"), "huidong6" : "huidong6" }
{ "_id" : ObjectId("5b723c3ecf3a7a471b1d4adf"), "huidong7" : "huidong7", "name" : "张三" }

 这个"_id"是什么意思呢?之前说过,MongoDB使用"_id"来作为一个集合中的主键。如果插入的数据中,没有"_id"这个字段,那么MongoDB会自动创建一个"_id",值类型为ObjectId,MongoDB通过时间戳来产生一个单独的ObjectId而不是通过自增长。不同的集合中的"_id"的值可能会一样,但是同一个集合下的"_id"的值不一样。我们在colletion3集合中再添加一条数据:

> db.colletion3.insert({"_id":1001,"huidong8":"huidong8"})
WriteResult({ "nInserted" : 1 })
> db.colletion3.find()
{ "_id" : ObjectId("5b723c36cf3a7a471b1d4adc"), "huidong3" : "huidong3" }
{ "_id" : ObjectId("5b723c36cf3a7a471b1d4add"), "huidong4" : "huidong4" }
{ "_id" : ObjectId("5b723c3ecf3a7a471b1d4ade"), "huidong6" : "huidong6" }
{ "_id" : ObjectId("5b723c3ecf3a7a471b1d4adf"), "huidong7" : "huidong7", "name" : "张三" }
{ "_id" : 1001, "huidong8" : "huidong8" }

此时,我们再添加一个"_id"值为1001的数据就会报错,在其他集合中添加"_id"值为1001的数据不会报错。

如果插入数据过多,可以使用如下方式插入:

> res = {"_id":1002,"huidong9":"huidong9"}
{ "_id" : 1002, "huidong9" : "huidong9" }
> db.colletion3.insert(res)
WriteResult({ "nInserted" : 1 })
> db.colletion3.find()
{ "_id" : ObjectId("5b723c36cf3a7a471b1d4adc"), "huidong3" : "huidong3" }
{ "_id" : ObjectId("5b723c36cf3a7a471b1d4add"), "huidong4" : "huidong4" }
{ "_id" : ObjectId("5b723c3ecf3a7a471b1d4ade"), "huidong6" : "huidong6" }
{ "_id" : ObjectId("5b723c3ecf3a7a471b1d4adf"), "huidong7" : "huidong7", "name" : "张三" }
{ "_id" : 1001, "huidong8" : "huidong8" }
{ "_id" : 1002, "huidong9" : "huidong9" }

save()保存跟新数据:save()方法和insert()方法的区别在于,save会先判断集合当中是否存在相同的文档,如果存在不执行插入,如果不存在则执行插入。 比如:在colletion3中,已经存在一条数据{"huidong8":"huidong8"},此时我们写入如下语句:

db.colletion3.insert({"_id":1001,"huidong8":"huidong8"})    //会报错,提示主键id冲突,如果不加"_id"字段,则会插入一条新的"_id"不同的数据
db.colletion3.save({"_id":1001,"huidong8":"huidong8"})    //不会报错,如果插入{"_id":1001,"huidong10":"huidong10","age":22},则原来这条数据会跟新成后面插入的数据

猜你喜欢

转载自www.cnblogs.com/MasterBai2018/p/9473281.html
今日推荐