基本概念
- 数据库(database)
- 集合(collection)
- 文档(document)
- 数据库和集合在MongoDB中不需要手动创建
- 当创建文档时,如果文档所在集合或数据库不存在会自动创建数据库和集合
- 数据库和集合在MongoDB中不需要手动创建
Mongodb的windows服务安装和卸载
安装
: mongod --dbpath "C:\mongodb\db" --logpath "C:\mongodb\log.txt" --install --serviceName "MongoDB"
卸载
: mongod.exe --remove --serviceName "MongoDB"
1、了解Mongodb
MongoDB数据库中存的是各种各样的JSON(BSON)
2、更换MongoDB的database文件夹
mongod --dbpath 文件夹地址
3、运行MongoDB
#####命令行下运行 MongoDB 服务器
为了从命令提示符下运行 MongoDB 服务器,你必须从 MongoDB 目录的 bin 目录中执行 mongod.exe 文件。C:\mongodb\bin\mongod --dbpath c:\data\db
4、重新设置端口
C:\mongodb\bin\mongod 数据库路径 --port 123456
注意
: 端口数最大不能超过65535
5、连接MongoDB
我们可以在命令窗口中运行 mongo.exe 命令即可连接上 MongoDB,执行如下命令:C:\mongodb\bin\mongo.exe
6、启动MongoDB
要启动 MongoDB,请运行 mongod.exe 。
例如,从命令提示符:D:\Program Files\MongoDB\Server\3.4\bin\mongod.exe
注意:如果不使用 –dbpath 指定数据存储的目录,
那么 MongoDB 默认使用的是C:\data\db
目录,所以在启动 MongoDB 数据库之前要确保C:\data\db
目录已经创建了。
- 在mongodb\bin下打开命令行模式:
(启动服务器)D:\mongodb\bin>mongod
- 验证Mongdb启动成功
在Chrome浏览器下,打开localhost:27017
若出现It looks like you are trying to access MongoDB over HTTP on the native driver port.
则登录成功 打开mongo
命令行下输入mongo
,进入mongo的客户端命令模式命令
show dbs
命令可以显示所有数据库的列表。show collections
显示数据库中的所有集合
db
命令可以显示当前数据库对象或集合。use 数据库名
命令,可以进入到一个指定的数据库。- 可以创建任意数据库
- MongoDB 的 CRUD(增删改查)操作
增添
db.集合名.insert(doc)
: 在集合中插入一个文档doc,为**json格式** { :,: }
- 若要插入多个doc,则用列表形式
- 向集合插入文档时,若没有给文档指定_id属性,则数据库会自动为文档添加_id
- 该属性为文档的唯一标识
- 可以自己指定_id ,”_id”=” “
- 使用循环,插入多条数据
1
2
3
4
5
6
7
8
9
10
11// 方法1
for(var i=1 ; i <200 ; i++){
db.user.insert({num:i}) //需要调用200次insert方法,效率低
}
//方法2
var arr = [];
for(var i=1 ; i<200 ; i++){
arr.push({num:i}); //将num从1到200添加到数组arr中
}
db.num.insert(arr) //只需调用一次 insert方法
查找
db.集合名.find()
: 查询当前集合中的所有文档 `db.collection.find()` `find()`返回的是数组,若要查询其中某个属性,则要添加索引`[0]`
- find()用来查询集合中所有符合条件的文档,返回一个数组,可以加索引
- 增加查询条件
- {}:{属性:值} 查询指定属性的文档
- MongoDB支持直接通过内嵌文档的属性查询,若要查询内嵌文档,则可以通过
.
的形式来匹配此时属性名必须使用引号db.user.find({"hobby.movies":"hero"})
更多方法 | 用处 | 拓展 |
---|---|---|
findone() |
查询符合条件的第一个文档对象 | |
find().count() |
统计所有文档的数量 | |
find({num:{$gt:200}}) |
查找数字大于200的数据 | $gte : >= $lt :< $lte :<= $ne :!= |
find().limit(10) |
==limit()== 可以设置显示数据的上限,即显示10条 | |
find().skip(10).limit(10) |
==skip()== 用于跳过指定的数据,该命令可以查询第11-20条数据 | 其中skip() ,limit() 顺序可以倒换 |
finf({$or:[{a:1},{b:2}]}) |
查询a属性为1或b属性为2的集合 |
1 | // 查找用户订单,使用用户ID作为索引 |
修改
db.collection.update(查询条件,新对象)
: 修改文档内容 方法:`updateMany`,`updateOne`
1
2// 利用update实现updateMany 和 updateOne 的功能
db.user.update( {name:"jedieal"},{$set:{ age=28 }},{multi:true});- 注意:update()默认情况下会使用新对象来替换旧的对象
- 如果需要修改指定的属性,而不是替换,则需要使用“修改操作符”来完成
$set
:可以用来修改,增添文档属性$unset
:可以用来删除文档属性
- 例子1:
db.user.update({name:"jedieal"},{age:28});
: ==age==会将==name==内容给替换 - 例子2:
db.user.update({name:"jedieal"},{$set:{ age=28 }});
- 利用
$set
,只对age进行修改,还可以用来添加值
- 利用
- 删除属性,还是属于修改
- 修改集合属性的数组内的数据
- 1
db.user.update({ },{$push :{"hobby.movies":"hero"}})
- 2
db.user.update({ },{$addToSet :{"hobby.movies":"hero"}})
: 若要加入的元素与数组内有相同的,则不会添加
- 1
- 如果需要修改指定的属性,而不是替换,则需要使用“修改操作符”来完成
- 注意:update()默认情况下会使用新对象来替换旧的对象
更多方法 | 作用 | |
---|---|---|
{$inc:{a:2}} |
在a的值的基础上加上2 | 要减少,可以将2变为-2 |
删除
db.collection.remove()
db.collection.deleteOne();
,db.collection.deleteMany(;
==remove()==
: 可以根据条件来删除文档,传递的条件的方式和==find()== 一样- 删除一个
db.collection.remove({ },true);
- 删除所有文档,清空集合(性能略差)
db.collection.remove({})
- 清空集合(优化)
db.collection.drop()
- 清空集合(优化)
- 删除数据库
db.dropDatabase()
- 删除一个
- 一般数据库中的数据都不会删除,所以删除的方法很少用
一般会在数据中添加一个字段,来表示数据是否被删除
db.collection.update({ },{$setZ:{isDel:0}})
db.collection.find({isDel:0})
: 利用==isDel==作为标准,0代表没删除,1 代表删除
NOSQL (Not Only SQL)
数据库
数据库的服务器
- 用于保存数据
- mongod 用于启动服务器
数据库的客户端
- 用于操作数据,对数据进行增删改除
- mongo 用于启动客户端