MongoDB
简介
- MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
- 在高负载的情况下,添加更多的节点,可以保证服务器性能。
- MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
- MongoDB 是一个非关系型的数据库 nosql
特点
- MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。
- MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
- MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
- MongoDB安装简单…
打开与关闭mongodb:
/cmd/ //管理员运行
- mongod -help //验证MongoDB安装成功
- net start MongoDB
- mongo //开启MongoDB
- net stop Mongo//关闭MongoDB
基本组成:
'- 数据库'
//仓库,用来存放集合
'- 集合'
//类似数组,相当于表,集合中可以存放文档
'- 文档'
//数据库最小单位,,相当于字段,存储和操作的内容都是文档
增删改查api
启动
/cmd/ //管理员打开
net start MongoDB //
mongo //启动
数据库级操作
use dropDatabase_name //创建stu数据库/切换到stu数据库
show dbs //查看所有数据库
db //查看当前数据库
db.dropDatabase() //删除数据库
集合级操作
db.stu.insert() //向数据库添加数据(自动创建集合)
db.createCollection(name,options) //创建集合
show collections //查看所有集合
db.collection_name.drop() //删除指定集合
文档级操作
db.collection_name.insert(document) //插入文档
db.collection_name.save(document) //插入文档(更新id)
db.collection.insertOne() //向指定集合中插入一条文档数据
db.collection.insertMany() //向指定集合中插入多条文档数据
db.collection_name.find(query, projection) //查看stu数据库的所有文档
db.collection_name.update(query,update,upset,multi) //更新文档
列表操作
gt,lt,gte,lte //大于,小于,大于等于,小于等于
limit() //指定展示多少数据
skip() //指定跳过多少数据
sort() //指定排序方式.+1正序,-1倒序
api案例
/cmd/ //管理员打开
net start MongoDB //启动
mongo //验证启动成功
/* ===========增删查============================ */
use H51905 //创建H51905数据库
show dbs //查询所有数据库
db.createCollection('students'{capped:true,max:5,size:1024}) //创建students集合
show collections //查询当前数据库的集合
db.students.insert({name:"许晴",age:18,hobby:'抽烟喝酒汤头'}) //向students集合中插入一条数据
db.students.find() //查询students集合所有的数据
db.students.save({name:"发撒法",age:21}) //没有id时,同insert,插入
db.students.save({id:2,name:"发撒法",age:21}) //更新id为2的字段
for(var i=0i<10;i++){
db.students.insert({name:"小明"+i,age:i}) //插入多条数据,js语法
}
db.students.insertMany([{name:"发撒法",age:21},{name:"发撒法",age:21},{name:"发撒法",age:21}])//一次性插入多条数据
db.students.deleteMany() //删除students的所有字段
db.students.deleteOne({id:1})//删除id为1的数据(一条数据)
db.students.deleteMany({age:16})//匹配age为16的字段,全部删除
db.students.drop() //删除students集合
show collections //查询students集合是否存在
db.dropDatabase() //删除当前数据库
/* =========== 更新 ============================== */
db.students.update({id:1},{$set:{age:20}}) //找到id为1的字段,修改其age为20
db.students.update({id:0},{$set:{age:20}},{upsert:true}) //找不到id为0的字段时,会插入该字段
db.students.update({id:/0/},{$set:{age:20}},{multi:true}) //匹配以0开头的字段,修改所有匹配的字段的age为20
db.students.update({id:/0/},{$set:{age:20}},false,true) //全参数的简写
db.students.find({age:$gt:23}) //匹配所有大于23的字段
db.students.update({age:$gt:23},{$et:{name:'黄庆'}}) //匹配所有大于23的字段,并将所有name属性改为'黄庆'
/* =========== 展示 ============================= */
db.students.find.limit(5) //展示5条数据
db.students.find.skip(5)//跳过前5条数据,从第六条开始展示数据
db.students.find.sort(+1) //正序展示,-1为倒序展示(数据库不变)
db.students.find.sort({age:-1}) //按照age,倒序展示(限于当前返回的效果)
net stop MongoDB
/* ===========操作数据库 ========================= */
创建数据库:
use DATABASE_NAME
// 如果数据库不存在,则创建数据库,否则切换到指定数据库。
// 例如:
/cmd/
use h51802
//switched to db runoob //cmd回应
db
//h51802 //cmd回应
查看数据库:
show dbs
// 创建的数据库 h51802 并不在数据库的列表中,要显示它,我们需要向 h51802 数据库插入一些数据。
db.h51802.insert({"name":"吴彦祖"})
show dbs
// MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。
删除数据库:
db.dropDatabase()
/* ===========操作集合 ========================= */
创建集合:
db.createCollection(name,options)
`参数说明:`
- name: //要创建的集合名称
- options: //可选参数, 指定有关内存大小及索引的选项
// options包括:
capped //布尔(可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。当该值为 true 时,必须指定 size 参数
size //数值(可选为固定集合指定一个最大值(以字节计).如果 capped 为 true,也需要指定该字段。
max //数值(可选)指定固定集合中包含文档的最大数量。 |
// 在 test 数据库中创建hero 集合:
use test
db.createCollection("hero")
{ "ok" : 1 }
// 创建固定集合 mycol,整个集合空间大小 6142800 KB, 文档最大个数为 10000 个。
db.createCollection("mycol", { capped : true, autoIndexId : true, size : 6142800, max : 10000 } )
{ "ok" : 1 }
// 在 MongoDB 中,不需要创建集合。
// 当你插入一些文档时,MongoDB 会自动创建集合。
db.mycol2.insert({"name" : "吴彦祖"})
show collections
查看集合:
show collections
删除集合:
db.集合的名字.drop()
//成功删除选定集合,返回 true,否则返回 false。
/* ===========操作文档 ========================= */
插入文档:
db.COLLECTION_NAME.insert(document)
db.COLLECTION_NAME.save(document)
// 例如:
db.hero.insert({title: 'MongoDB 教程',
description: 'MongoDB 是一个 Nosql 数据库',
by: '吴彦祖',
url: 'http://www.runoob.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
})
`insert和save的区别`
// 插入文档你也可以使用 db.col.save(document) 命令。如果不指定 _id 字段 save() 方法类似于 insert() 方法。如果指定 _id 字段,则save() 方法会更新该 _id 的数据。
- db.collection.insertOne()//向指定集合中插入一条文档数据
- db.collection.insertMany()//向指定集合中插入多条文档数据
// 例如:
'插入单条数据'
var document = db.collection.insertOne({"a": 3})
'插入多条数据'
var res = db.collection.insertMany([{"b": 3}, {'c': 4}])
更新文档:
db.collection_name.update(query,update,upsert,multi)
'query' //update的查询条件,类似sql update查询内where后面的。
'update'//update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
'upsert'//可选,这个参数的意思是,如果找不到满足查询条件的数据,那么就会添加一条数据进去
'multi' //可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
//例如
db.hero.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}})
db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );
`条件操作符`
// 条件操作符用于比较两个表达式并从mongoDB集合中获取数据。
(>) 大于 - $gt
(<) 小于 - $lt
(>=) 大于等于 - $gte
(<= ) 小于等于 - $lte
删除文档:
db.集合名字.deleteOne({})
// 删除 status 等于 A 的全部文档:
db.inventory.deleteMany({ status : "A" })
查询文档:
// find() 方法以非结构化的方式来显示所有文档。
db.collection.find(query, projection)
展示文档:
limit() //表示一次展示多少条数据
skip() //表示跳过多少条数据
sort() //表示排序 +1表示正序 - 1表示倒序