一.mongodb的基本操作:
1.查看mongodb当前所有的databases : show dbs
2.选择数据库(database) : use databaseName(该数据库不存在则会自动创建,但是只存在于mongodb预设的缓存中,如果你不做任何操作,关闭数据库,那么该数据库也就不存在了,如果你往该库中添加了数据,那么该库就被真正的创建了)
3.查看数据库中的集合(collection) : show collections
4.获取mongodb中的帮助 : db.help() 里面有很多的实用性的操作,在你不知道mongodb有哪些操作的时候很有帮助
5.删除数据库 : use databaseName(必须先选择要删除的数据库), db.dropDatabase()
6.删除指定数据库下面的集合: use databaseName(必须先选择要删除集合的数据库), db.collectionName.drop()
二.mongodb插入文档
因为我们的mongodb使用javascript做shell的,所以可以说mongodb的客户端编程跟javascript差不多
往集合中插入的文档,其格式与json基本一样,所以存储在集合中的文档的格式都是bson,bson是一种类json的二进制形式的存储格式,称之为binary json
往集合中插入新的文档有两种方式,一种是insert(),一种是save()
区别:
insert()方法:当插入数据时,已经存在的_id的数据,则mongodb会直接报错,并返回对应的_id
save()方法:当插入数据时,它会先去循环一遍集合中的所有数据,判断插入的数据的_id是否存在于集合中,如果不存在则会直接插入一条新的文档,如果存在,则会调用mongodb的update()方法,更新_id对应的数据(相当于覆盖该_id的文档内容)
语法:
db.collectionName.insert(document)
db.collectionName.save(document)
注意:
1.在插入数据之前,需要注意的是mongodb对于field(字段)的数据类型非常的敏感,比如你插入了一个age字段,内容为30,是一个string类型的,但是你如果用一个整型30去查询,是查不到该数据的,因为数据类型不对,所以插入数据的时候要慎重,考虑好字段的类型
2.虽然mongodb灵活性很强,不像关系型数据库那样,建立一个新的字段,所有的数据都有该字段,但是在实际开发中,本人还是建议你插入数据尽量保持每一个集合的字段都相同,这样方便你在程序中的开发
1.插入文档方法之insert()
从上图可以看出,当你插入一条数据成功后,会返回写入的结果,插入成功,插入1条[ WriteResult({ "nInserted" : 1 }) ],而且你会发现,每条数据前面出现了一个"_id"的,它跟我们使用的关系型数据库不太一样,我们使用的关系型数据库一般primary key都是id,而且是自增的(1,2,3,4.....),而它这个是mongodb内为每条文档生成的一个唯一的标识,也具有唯一性,但是不会像关系型数据库那样自增而已,当然我们也可以插入指定的"_id"(等下说save()的时候再实践)
a.当我们插入一条数据,这个"_id"已经存在了,会发生什么呢?
b.当然insert()方法也可以插入_id(自定义_id的值,而不使用mongodb生成的_id),指定它的值跟我们关系型数据库一样(1,2,3,4,5,6....)
c. mongodb能不能跟关系型数据库一样批量插入呢?关系型数据库批量插入:insert into tablename(columns)values(text1),(text2),(text3).........,而我们的mongodb是不能批量插入的,只能通过循环来实现批量插入
d.在mongodb中每个document的字段field可以不相同(mongodb的灵活性,但是不建议这么做)
2.插入文档方法之save():
与insert()方法差不多都是插入文档,唯一的不同就是如果_id存在,save()则会更新这条_id对应的数据,而insert则是直接报错,并返回该_id
也可以批量更新,同时不存在的则插入,存在的则更新(下图_id只有1,2,3,通过循环更新了1,2,3,同时也添加了_id为4,5的两条数据):
通过上面的示例,我们可以发现:
1.mongodb不需要事先定义collection,在第一次插入数据时,它会自动创建collection
2.在collection中每添加一条document,除非我们自己指定_id,否则,系统都会生成一个唯一的标识ObjectId
3.在collection中,每个document可以有不同的field(字段)
如有错误的地方,欢迎批评指正,本人新手,初学!!!!!!