MongoDB基本语句 文档的CRUD

MongoDB概念

什么是MongoDB?

​ MongoDB是一个== 跨平台的,面向文档==的数据库,是当前NoSQL数据库产品中最热的一种。它介于关系数据库和非关系数据库之间,是非关系数据库当中功能最丰富,最像关系数据库的产品。它支持的数据结构非常松散,是类似JSON的BSON格式,因此可以存储比较复杂的数据类型。

关系型数据库与非关系型数据库

​ 关系型数据库:表与表之间有一对一,一对多的关系(靠主外键)多对多(靠中间表)

​ 非关系型数据库:表与表之间没有任何关系。

什么时候用MongoDB?

  • 数据量大

  • 写入操作频繁(不重要)

  • 价值低(丢失一两条无所谓)

MongoDB特点

MongoDB最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。它是一个面向集合的,模式自由的文档型数据库。
具体特点总结如下:

  1. 面向集合存储,易于存储对象类型的数据
  2. ​模式自由
  3. ​支持动态查询.
  4. ​支持完全索引,包含内部对象
  5. ​支持复制和故障恢复.
  6. 使用高效的二进制数据存储,包括大型对象(如视频等)
  7. ​ 自动处理碎片,以支持云计算层次的扩展性
  8. 支持Python, PHP, Ruby, Java, C,C#,Javascript,
    Perl及C++语言的驱动程序,社区中也提供了对Erlang及.NET等平台的驱动程序
  9. 文件存储格式为BSON (一种JSON的扩展)

MongoDB体系结构

MongoDB的逻辑结构是-种层次结构。主要由:文档(document)、集合(collection)、数据库(database)这三部分组成的。逻辑结构是面向用户的,用户使用MongoDB开发应用程序使用的就是逻辑结构。

  1. MongoDB的文档( document),相当于关系数据库中的一行记录。.
  2. 多个文档组成一个集合(collection) ,相当于关系数据库的表。
  3. 多个集合(collection) ,逻辑.上组织在一-起, 就是数据库(database)
  4. 一个MongoDB实例支持多个数据库(database)文档(document)、集合(collection)、数据库(database)的层次结构如下图:
    .
    MongoDB基本语句 文档的CRUD_第1张图片

MongoDB基本语句 文档的CRUD_第2张图片

基本常用命令

集合的操作

# 创建数据库的语法格式,如果数据库不存在则自动创建
user comment
# 查看有权查看的所有的数据库命令
show dbs
# 查看当前正在使用数据库的命令
db
# 数据库的删除
db.dropDatabase()
# 集合的创建(显式创建)
db.createCollection("mycollection")
# 集合的删除
db.mycollection.drop
# 集合的创建(隐式创建)
db.collection.insert(<document or array of documents>,{
	writeConcern:<document>,
	ordered:<boolean>
})
# 例:
db.comment.insert({"articleid" : "100000" , "content":"今天天气真好,阳光明媚","userid" :"1001" ,"nickname" :"Rose" ,"createdatetime ":"2020-03-22", "likenum":NumberInt(10), "state":nu11});
# 隐式创建注意点:
# comment集合如果不存在,则会隐式创建
# mongo中的数字,默认情况下是double类型,如果要存整型,必须使用函数Number(整型数字),否则取出来有问题
# 插入当前日期使用new Date()
# 插入的数据没有指定_id 会自动生成主键值
# 如果某字段没值,可以赋值null,或不写该字段

MongoDB基本语句 文档的CRUD_第3张图片

# 批量插入
db.comment.insertMany(
	[<document 1>,<document,2>,....]
	{
		writeConcern:<document>,
		orderd:<boolean>
	}# 例: 数据过多容易出现异常  加上try catch
try{
db.comment.insertMany([{"_id":"1","articleid":"100001","content":"我们不应该把清晨浪费在手机上,健康很重要,一杯温水幸福你我他","userid":"1002","nickname":"相忘于江湖","createdatetime":new Date(),"likenum":NumberInt(1000),"state":1},{"_id":"2","articleid":"100001","content":"我夏天空腹喝凉开水,冬天喝温开水","userid":"10O5","nickname":"伊人憔悴","createdatetime":new Date(),"likenum":NumberInt(888)"state":1}{"_id":"3","articleid":"100001","content":"我一直喝凉开水,冬天夏天都喝","userid":"10O4","nickname":"杰克船长","createdatetime":new Date(),"likenum":NumberInt(666),"state":1},{"_id":"4","articleid":"100001","content":"专家说不能空腹吃饭,影响健康","userid":"1003","nickname":"凯撒","createdatetime":new Date(),"likenum":NumberInt(2000),"state":1},{"_id":"5","articleid":"100001","content":"研究表明,刚烧开的水千万不能喝,因为烫嘴。","userid":"1003","nickname":"凯撒","createdatetime":new Date(),"likenum":NumberInt(3000),"state":1}]);
}catch(e){
print(e);
}

MongoDB基本语句 文档的CRUD_第4张图片

文档的CRUD

# 查询所有
db.comment.find()
# 根据条件查询
db.comment.find({userid:"1002"})
# 根据条件只查询一个
db.comment.findOne({userid:"1002"})
# 投影查询
# 根据条件查询 只显示articleid字段(默认带上_id字段)
db.comment.find({userid:"1002"},{articleid:1})
# 根据条件查询 只显示articleid字段
db.comment.find({userid:"1002"},{articleid:1,_id:0})
# 文档的更新 
db.colletion.update(query,update,options)
db.colletion.update(
    <query>,#条件
    <update>,#修改值
    {
    	upset:<boolean>#没有雨查询条件匹配是创建 默认false
    	multi:<boolean>, #更新符合查询条件的多个文档
    	# 以下不关注
    	writeConcern:<document>,
    	collation:<document>,
    	arrayFilters:[<filterdocument1>,...],
    	hint:<document|string>
    })
# query:条件,update:修改值 
# 例:
# 默认只修改一条
db.comment.update({userid:"1002"},{nickname:"Jack"})
# 修改所有符合的条件
db.comment.update({userid:"1002"},{nickname:"Jack"},{multi:true})
# 列值增长的修改
db.comment.update({userid:"1002"},{$inc:{likenum:NumberInt(1)}})

# 删除文档
# 将数据全部删除  慎用! 
db.comment.remove({})
# 条件删除 _id=1
db.comment.remove({_id:"1"})

# 统计 query 查询选择条件 options 可选 用于修改计数的额外选项
# 基本语法
db.collection.count(query,options)
# 统计所有的计数
db.commment.count()
# 按条件统计记录数
db.comment.count({userid:"1003"})

# 分页
# 基本语法
db.collection_name.find().limit(number).skip(number)
# 指定返回两条数据 0-2
db.collection_name.find().limit(2)
# skip 跳过前2条
db.collection_name.find().skip(2)
# 分页的实现
db.collection_name.find().limit(0).skip(2)
db.collection_name.find().limit(2).skip(4)
db.collection_name.find().limit(4).skip(6)

# 查询
# 排序查询
db.collection_name.find().sort({KEY:1})
db.collection_name.find().sort(排序方式)
# 例  1为升序  -1为降序
db.collection_name.find().sort(userid:1)
db.collection_name.find().sort(userid:-1)

# 正则复杂查询
db.集合.find({字段:/正则表达式/})
# 包含有开水的数据
db.comment.find({content:/开水/})
db.comment.find({content:/^专家/})

# 比较查询
db.集合名称.find({"field":{$gt:value}}) # 大于: field > value
db.集合名称.find({"field":{$lt:value}}) # 小于: field < value
db.集合名称.find({"field":{$gte:value}}) # 大于等于: field >= value
db.集合名称.find({"field":{$lte:value}}) # 小于等于: field <= value
db.集合名称.find({"field":{$ne:value}}) # 不等于: field != value

# 包含查询
# userid包含1003 1004的文档
db.comment.find({userid:[$in:["1003","1004"]]})
# userid不包含1003 1004的文档
db.comment.find({userid:[$nin:["1003","1004"]]})

# 条件连接查询
$and:[{},{},{}]  $or:[{},{}] 用法相同
# 例:
db.comment.find({$and:[{likenum:{$gte:NumberInt(700)},{likenum:{$lt:NumberInt(2000)}}]})
db.comment.find({userid:[$nin:["1003","1004"]]})

# 条件连接查询
$and:[{},{},{}]  $or:[{},{}] 用法相同
# 例:
db.comment.find({$and:[{likenum:{$gte:NumberInt(700)},{likenum:{$lt:NumberInt(2000)}}]})

你可能感兴趣的:(Nosql,mongodb)