数据库-mongoDB-基础
-----启动MongoDB----
1.命令行下运行 MongoDB 服务器
纯命令启动
..>mongod --dbpath E:\mongodb\data\db --logpath E:\mongodb\data\log\mongod%date:~0,4%%date:~5,2%%date:~8,2%.log
配置文件启动
..>mongod -f "E:\mongodb\mongod.cfg"
mongod.cfg配置如下:
systemLog:
destination: file
path: E:\mongodb\data\log\mongod.log
storage:
dbPath: E:\mongodb\data\db
2.连接MongoDB
..>mongo.exe
-----数据库操作----
---进入MongoDB---
注:默认位置为test数据库
use mytest
-----进入数据库mytest(没有则添加数据库)
db.dropDatabase()
-----删除当前数据库
show dbs
-----查看所有数据库
---表操作----
db.createCollection("mycol",{capped:true,autoIndexId:true,size :6142800,max:10000})
-----创建固定集合(类似于表) mycol,自动在 _id 字段创建索引,整个集合空间大小 6142800 KB, 文档最大个数为 10000 个。
注:在 MongoDB 中,你不需要创建集合。当你插入一些文档时,MongoDB 会自动创建集合。
db.my.drop()
---删除集合my
show tables
-----查看所有集合(表)或者命令【show collections】
-----增加数据----
db.my.insert({"name":"菜鸟教程"})
----插入数据
db.my.insertOne({"a": 3})
------向指定集合中插入一条文档数据
db.my.insertMany([{"b": 3}, {'c': 4}])
-----向指定集合中插入多条文档数据
-----删除文档-----
db.col.remove(条件,默认删除所有)
db.col.remove({'title':'教程'},1)删除title为教程的第一条数据
db.col.remove({'title':'教程'})删除所有title为教程的数据
db.col.remove({})删除所有数据
db.repairDatabase()删除后来回收磁盘空间
-----新版--------
db.inventory.deleteMany({})删除集合下全部文档:
db.inventory.deleteMany({status:"A"})删除status等于A的全部文档:
db.inventory.deleteOne({status:"D"})删除status等于D的一个文档:
-----查询数据-----
-----设置格式----
db.my.find()
db.my.find().pretty() 格式化数据
db.collection.find(query,{_id:0,title:1,by:1})//显示title和by字段,隐藏_id字段(只有_id可以指定为0隐藏和1显示
db.collection.find(query,{title:0,by:0})//隐藏title和by字段,显示其它字段
-----设置条件----
1.and
db.col.find({"by":"菜鸟教程","title":"教程"})
----whereby='菜鸟教程'andtitle='教程'
2.or
db.col.find({$or:[{"by":"菜鸟教程"},{"title":"MongoDB教程"}]})
----whereby='菜鸟教程'ortitle='MongoDB教程'
3.and+or
db.col.find({"likes":{$gt:50},$or:[{"by":"菜鸟教程"},{"title":"MongoDB教程"}]})
----where likes>50 and (by='菜鸟教程' or title='MongoDB教程')
4.符号
db.posts.find({qty:{$gt:50,$lt:80}})
----where qty>50 and qty<80
-----附表-----
(>)大于-$gt
(<)小于-$lt
(>=)大于等于-$gte
(<=)小于等于-$lte
(!=)不等于-$ne
(=)等于-$eq
查询title包含"教"字的文档:db.col.find({title:/教/})
查询title字段以"教"字开头的文档:db.col.find({title:/^教/})
查询title字段以"教"字结尾的文档:db.col.find({title:/教$/})
-----设置分页----
db.test.find({amount:{$gt:23}}).sort({"amount":1}).skip(1).limit(10)
--------find条件查询amount>23.
sort指定amount排序(1为升-1为降),
skip设置跳过第一条数据,
limit表示显示10条记录,
注:查询优先级为:排序sort>跳过skip>显示limit
skip是在内存中一条一条数的,数值越大越不要用
-----更新文档-----
1.update
db.collection.update(
<query>, ---查询条件,类似where
<update>, ---更新条件,类似set后面的
{
upsert:<boolean>, ---可选,不存在记录时是否插入新记录,【false(默认):不插入,true:插入】
multi:<boolean>, ---可选,【false(默认):更新第一条记录,true:更新全部记录】
writeConcern:<document> ---可选,抛出异常的级别
}
)
db.my.update({'name':'MongoDB教程'},{$set:{'name':'MongoDB'}},{multi:true})
----更新集合my中name为‘MongoDB教程’的第一条数据name为'MongoDB'
-----新版--------
db.my.updateOne()向指定集合更新单个文档
db.my.updateMany()向指定集合更新多个文档
2.save
db.col.save({"_id":ObjectId("123"),"title":"MongoDB"})
----修改ID为‘123’的字段title为MongoDB,如果不存在则插入数据
-----速度优化----
db.col.createIndex({"title":1,"description":-1},{background:true})
----创建多个字段索引title升序和description降序background:true让创建工作在后台执行
db.col.createIndex({"createDate": 1},{expireAfterSeconds: 180})
----设置在创建记录后,180秒左右删除。
注:createDate必须是 Date 类型的单字段索引。180秒后不是立即执行,默认 60s 扫描一次,删除也不一定是立即删除成功。
1、查看集合索引
db.col.getIndexes()
2、查看集合索引大小
db.col.totalIndexSize()
3、删除集合所有索引
db.col.dropIndexes()
4、删除集合指定索引
db.col.dropIndex("索引名称")
-----聚合统计----
示例:多层查询(多个管道使用)
db.getCollection('m_msg_tb').aggregate([
{$match:{m_id:10001,mark_time:{$gt:new Date(2017,8,0)}}},
{$group: {
id: {$dayOfMonth:'$mark_time'},
pv: {$sum: 1}
}
},
{$sort: {"_id": 1}}
])
-----附管理命令----
$project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
$match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
$limit:用来限制MongoDB聚合管道返回的文档数。
$skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
$unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
$group:将集合中的文档分组,可用于统计结果。
$sort:将输入文档排序后输出。
$geoNear:输出接近某一地理位置的有序文档。
-----附聚合命令----
$sum 计算总和。
$avg 计算平均值
$min 获取集合中所有文档对应值得最小值。
$max 获取集合中所有文档对应值得最大值。
$push 在结果文档中插入值到一个数组中。
$addToSet 在结果文档中插入值到一个数组中,但不创建副本。
$first 根据资源文档的排序获取第一个文档数据。
$last 根据资源文档的排序获取最后一个文档数据
-----格式----
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])
----结果中_id是$by_user的分组条件,num_tutorial是统计$likes的和
-------------运维----
-----MongoDB副本集-----
注:副本集在主机宕机后,副本会接管主节点成为主节点,不会出现宕机的情况。
mongod --port 27017 --dbpath "D:\set up\mongodb\data" --replSet rs0
----启动一个名为rs0的MongoDB实例,其端口号为27017
db.isMaster() 当前运行的Mongo服务是否为主节点
rs.initiate() 启动一个新的副本集
rs.conf() 来查看副本集的配置
rs.status() 查看副本集状态
rs.add("mongod1.net:27017") 将一个名为mongod1.net,端口号为27017的Mongo服务添加到副本集中
-----备份和恢复------
mongodump -h localhost:27017 -d kaiye -o C://mongodump
-h:MongDB所在服务器地址127.0.0.1:27017
-d:需要备份的数据库实例kaiye
-o:备份的数据存放位置C:\mongodump
mongorestore -h 127.0.0.1:27017 -d test c:\data\dump
---恢复c:\data\dump数据到127.0.0.1:27017中的test
-----监控命令----
.>mongostat 间隔固定时间获取mongodb的当前运行状态
.>mongotop 默认每秒查看花费大量的时间在读取和写入数据
---mongotop 10 每10秒查看
---mongotop --locks 查看数据库中锁的状态
-----账号管理----
1.创建管理员
.>use admin
2.然后创建用户和密码:
.>db.createUser({user:’root’,pwd:’root1234’,roles:[‘root’]})
3.创建了管理员账号和密码之后,然后运行Mongo服务的时候加上 –auth参数:
.>mongod --dbpath "F:\db" --logpath "F:\DB.log" --auth
3.创建了管理员账号和密码之后,然后运行Mongo服务的时候加上 –auth参数:
.>mongod --dbpath "F:\db" --logpath "F:\DB.log" --auth
4.登录数据库
.>db.auth('root','root1234')
5.node中的应用示例
mongoose.connect('mongodb://root:root1234@localhost:27017/test?authSource=admin');
posted on 2019-07-05 16:08 xcc_20190625 阅读(153) 评论(0) 收藏 举报
浙公网安备 33010602011771号