MongoDB入门(1)

参考文献

MongoDB自学参考

# 官方文档
https://docs.mongodb.com/manual/crud/
# 实验楼-免费课程(自带环境)
https://www.shiyanlou.com/courses/12
# 菜鸟教程
https://www.runoob.com/mongodb/mongodb-tutorial.html

基本概念

数据库

集合

集合是一组文档的组合,类似关系型数据库中的“表”。

{"company":"Chenshi keji"} {"people":"man","name":"peter"}

文档

文档是MongoDB的核心,类似关系型数据库中的“行”。

# 这就是引用式关系
{
   "name": "Tom Benzamin",
   "contact": "987654321",
   "dob": "01-01-1991",
   "address_ids": [
      ObjectId("52ffc4a5d85242602e000000")    #对应address文档的id字段
   ]
}

在这里插入图片描述

基本操作

创建数据库

启动服务

sudo service mongodb start

进入MongoDB

mongo

使用use进入数据库mydb
如果不存在,则自动创建

use mydb

查看当前连接的数据库

db

查看所有数据库

show dbs

使用db命令可以查看当前数据库对象或者集合
使用use命令可以连接到指定数据库

销毁数据库

db.dropDatabase()

> use local
switched to db local
# 删除数据库
> db.dropDatabase()
# 查看剩余所有的数据库
> show dbs

创建集合

db.createCollection(name, options)

  • options: 是一个作为初始化的文档
> use mydb
switched to db mydb

# 无参数
> db.createCollection("user") 
{'ok' : 1}

# 显示数据库内所有的集合
> show collections
user

# 带参数
> db.createCollection("shiyanlou2", { capped : 1, autoIndexId : 1, size : 6142800, max : 10000 } ) #带参数
{ "ok ": 1 }
  • capped:类型为Boolean,如果为true创建一个大小固定的的集合,条目过大会自动覆盖
  • autoIndexId:默认为false,如果为true会在_id上自动创建索引
  • size:如果capped为true时需要指定,指定参数的最大值,单位为byte
  • max:最大文档数

删除集合

db.xxx.drop()

> use mydb
switched to db mydb
> db.createCollection("users") 
{'ok' : 1}
> show collections

插入文档

insert

db.xxx.insert()
如果数据库中不存在xxx集合,会自动创建

> use mydb
switched to db mydb
> db.users.insert([
	{ name : "jam",
	email : "jam@qq.com"
	},
	 name : "tom",
	 email : "tom@qq.com"
	  }
	])

查看集合中的数据db.xxx.find()

save

db.xxx.save()
如果数据库中不存在xxx集合,会自动创建

save() 还可以根据 _id 替换已存在的文档
db.xxx.save(_id:ObjectId(), NEW_DATA)

区别
insert() 不可以添加主键_id相同的文档
save() 添加文档时,主键相同会覆盖之前的文档

更新文档

db.xxx.update(SELECTION_CRITERIA, UPDATED_DATA)

# 语法结构
db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)
  • SELECTION_CRITERIA:查找条件
  • UPDATED_DATA:更新条件
  • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew。默认是false,不插入;true为插入
  • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新
  • writeConcern :可选,抛出异常的级别。
db.shiyanlou.update({"e-mail":"test@qq.com"},{$set:{"e-mail":"group@qq.com"}},{multi:true})
  • multi:默认为false,更新只对一个文档生效。true对多个文档生效

save可以整个更新数据

查询文档

db.xxx.find()
db.xxx.find().pretty()

默认pretty显示需要修改

echo "DBQuery.prototype._prettyShell = true" >> ~/.mongorc.js

AND

MongoDB中没有AND,多个条件查找表示为:

db.xxx.find({ key1: value1, key2: value2, key3: value3})
> db.post.find({"by":"shiyanlou","to": "chenshi"}).pretty()

OR

MongDB中,OR查询语句以$or作为关键词,用法为:

db.xxx.find({
	$or[
		{key1: value1},
		{key2: value2}
		]
}).pretty()
> db.post.find({
    $or:[
        {"by":"shiyanlou"},
        {"title": "MongoDB Overview"}
    ]
	}
).pretty()

同时使用AND和OR

> db.post.find({
    "likes": {$gt:10},
    $or: [
        {"by": "shiyanlou"},
        {"title": "MongoDB Overview"}
    ]
}).pretty()
  • $gt 大于great than
  • $lt 小于less than
  • $gte 大于等于great than equal
  • $lte 小于等于less than equal

条件操作符 $type

在这里插入图片描述
范例:

> db.shiyanlou.find({"name":{$type:2}})

limit()

读取前n条数据

> db.shiyanlou.find().limit(1)

skip()

读取时跳过指定数量的数据

> db.shiyanlou.find().limit(1).skip(1)

sort()

1表示升序,-1表示降序

> db.shiyanlou.find().sort({"time":1})

删除文档

remove()

db.xxx.remove(DELECTION_CRITERIA)

db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }
)
  • justOne : (可选)默认值 false,则删除所有匹配条件的文档;设为 true 或 1,则只删除一个文档
  • writeConcern :(可选)抛出异常的级别
    在这里插入图片描述

deleteOne()

deleteMany()

MongoDB支持正则表达式

索引

db.xxx.ensureIndex({key: 1 | -1})

聚合 aggregate()

官方文档链接👈

  • $match,查询,类似find
  • $limit,限制显示结果数量
  • $skip,忽略结果数量
  • $sort,排序
  • $group,按照给定表达式组合结果

聚合管道

MongoDB的聚合框架以数据处理管道的概念为模型。文档进入多阶段管道,该管道将文档转换成汇总结果。例如

orders--status
	  --_id
	  --amount
	  
result--_id
	  --total
	  
db.orders.aggregate([
   { $match: { status: "A" } },
   { $group: { _id: "$cust_id", total: { $sum: "$amount" } } }
])

Map-Reduce

从MongoDB 2.4开始,某些mongo shell函数和属性在map-reduce操作中不可访问。

没有仔细学
在这里插入图片描述

单用途聚合操作

4.0版本更新使用新的API

db.collection.estimatedDocumentCount(maxTimeMS)

返回集合或视图中所有文档的计数。该方法包装count命令。
不采用查询过滤器,而是使用元数据返回集合的计数。
maxTimeMS,整数,可选。允许计数运行的最长时间。

db.collection.count(query, options)

官方链接👈

db.collection.distinct()
返回一个数组
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值