什么是MongoDB?
MongoDB是一个== 跨平台的,面向文档==的数据库,是当前NoSQL数据库产品中最热的一种。它介于关系数据库和非关系数据库之间,是非关系数据库当中功能最丰富,最像关系数据库的产品。它支持的数据结构非常松散,是类似JSON的BSON格式,因此可以存储比较复杂的数据类型。
关系型数据库与非关系型数据库
关系型数据库:表与表之间有一对一,一对多的关系(靠主外键)多对多(靠中间表)
非关系型数据库:表与表之间没有任何关系。
数据量大
写入操作频繁(不重要)
价值低(丢失一两条无所谓)
MongoDB最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。它是一个面向集合的,模式自由的文档型数据库。
具体特点总结如下:
MongoDB的逻辑结构是-种层次结构。主要由:文档(document)、集合(collection)、数据库(database)这三部分组成的。逻辑结构是面向用户的,用户使用MongoDB开发应用程序使用的就是逻辑结构。
# 创建数据库的语法格式,如果数据库不存在则自动创建
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,或不写该字段
# 批量插入
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);
}
# 查询所有
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)}}]})