在MongoDB非关系型数据库中,没有表的概念,所以存储数据比较灵活,因为不需要创建表,所以不用提前规定有哪些字段、字段的数据类型、字段是否可以为空、是否必须唯一等等。
例如在MongoDB中,我们可以把如下文档都可以保存到同一个集合中
{name: 'zs', age: 33} name字段的值为字符串
{name: 33,age: 'zs’} name字段的值为整形
{name: null, age: 33] name字段的值为null.
{name: 'zs', age: 33, gender:’男’} 此时集合中变成了三个字段,而不需要提前去创建gender这个字段。
在实际开发中如何选择关系型数据库和非关系型数据库?
其实关系型数据库和非关系型数据库之间并不是替代关系,而是互补关系所以在实际开发中大部分情况是可以结合在一起使用的。
对于数据模型比较简单、数据性能要求较高、数据灵活性较强的数据,我们可以存储到非关系型数据库中,相反则存储到关系型数据库中
查看数据库中有哪些集合
show collections
和MySQL中的 show tables;指令类似
创建集合
db.createCollection(‘集合名称’);
MySQL中的create table xxx;指令类似
插入数据
插入单条文档
db.集合名称.insert(文档对象);
db.test.insert({name:'xk',age:11}) #插入单条数据
插入多条文档
db.集合名称.insertMany([文档一,文档二])
db.test.insertMany([{name:'xw',age:12},{name:'xm',age:13}]) # 插入多条文档
和MvSOL中的 insert into xxx values 指令类似
查询数据
db.collection.find(query, projection)
query:(可选) 查询条件,相当于MySQL中的where
projection:(可选) 投影文档,规定了结果集中显示那些字段,相当于MySQL中的 select 字段1,字段2,… from 表名
# 查询集合中所有文档
db.test.find()
# 查询满足条件的文档(查询name为xw 的文档)
# 方式一
db.test.find({name:'xw'}) # 默认情况下就是按照相等来判断
# 方式二
db.test.find({name:{$eq:'xw'} }) # 显示的指明按照相等来查询
# 多条件查询
db.test.find({name:'xw',age:22})
如果不传任何参数,查询集合中所有数据,在开发中很少这么用,一般都会配合query来使用
删除集合
db.集合名称.drop()
和MySQL中的 drop table xxx; 指令类似
删除数据库
db.dropDatabase() 在哪个数据库中就会删除哪个数据库
主键
- MongoDB的主键和MySQL一样,也是用于保证每一条数据的唯一性与MySQL不同的是,MongoDB中的主键无需明确指定。
每一个文档被添加到集合之后,MongoDB都会自动添加一个主键。 MongoDB中文档主键的名称叫做_id
默认情况下文档主键是一个0bjectld类型的数据
- ObjectId类型是一个12个字节的BSON类型字符串(5e8c5ae9-c9d35e-759b
-d6847d)
前面4字节是存储这条数据的时间戳
第二位3字节存储这条数据的哪台电脑的标识符
第三位2字节的存储这条数据的MongoDB进程id
最后3字节是计数器