基础概念
MongoDB中是通过数据库、集合、文档来管理数据库的
传统数据库和MongoDB数据库对比
1、一个mongodb实例可以创建多个数据库
2、一个数据库可以创建多个集合
3、一个集合可以包括多个文档。
连接MongoDB
1、命令格式
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][? options]]
mongodb:// 固定前缀
username:账号,可不填
password:密码,可不填
host:主机名或ip地址,只有host主机名为必填项。 port:端口,可不填,默认27017
/database:连接某一个数据库
?options:连接参数,key/value对
例子:
mongodb://localhost 连接本地数据库27017端口 mongodb://root:itcast@localhost 使用用户名root密码为itcast连接本地数据库27017端口 mongodb://localhost,localhost:27018,localhost:27019,连接三台主从服务器,端口为27017、27018、27019
2、使用mongodb自带的javascript shell(mongo.exe)连接
cmd状态执行mongo.exe:
集合 (表)
创建集合
#语法
db.createCollection(name, options)
#参数说明
name: 要创建的集合名称
options: 可选参数, 指定有关内存大小及索引的选项
例子:
创建固定集合 student,整个集合空间大小 6142800 KB, 文档(行)最大个数为 10000 个。
db.createCollection("student", { capped : true, autoIndexId : true, size : 6142800, max : 10000 } )
options可选参数如下图:
总结:
最常用是autoIndexId:true,与关系型数据库相比不用创建固定的列,指定列的类型,mongodb数据库列不固定,一个文档可以有三列,也可以有多列。
删除集合
db.collection.drop()
#删除student集合
例子: db.student.drop()
文档(行)
插入文档
mongodb中文档的格式是json格式,下边就是一个文档,包括两个key:_id主键和name
每个文档默认以_id作为主键,主键默认类型为ObjectId(对象类型),mongodb会自动生成主键值。
例子:
db.student.insert({"name":"张涛","age":10});
总结:(官方建议)尽量让相同的文档插入到同一个集合中。
更新文档
语法:
db.collection.update(
<query>,
<update>,
<options>
)
参数说明:
query:查询条件,相当于sql语句的where
update:更新文档内容
options:选项
例子:
1、替换文档将符合条件"name":"北京黑马程序"的第一个文档替换为{“name”:“北京黑马程序员”,“age”:10}。
db.student.update(
{"name":"黑马程序员"},
{"name":"北京黑马程序员","age":10}
)
2、
s
e
t
修
改
器
使
用
set修改器使用
set修改器使用set修改器指定要更新的key,key不存在则创建,存在则更新。将符合条件"name":"北京黑马程序"的所有文档更新name和age的值。
db.student.update(
{"name":"黑马程序员"},
{$set:
{"name":"北京黑马程序员","age":10}
},
{multi:true}
)
multi:false表示更新第一个匹配的文档,true表示更新所有匹配的文档。
删除文档
语法:
db.student.remove(<query>)
参数说明
query:删除条件,相当于sql语句中的where
例子
1、删除所有文档
db.student.remove({})
2、删除符合条件的文档
db.student.remove({"name":"黑马程序员"})
查询文档
语法:
db.collection.find(query, projection)
参数说明:
query:查询条件,可不填
projection:投影查询key,可不填
例子
1、查询全部
db.student.find()
2、查询符合条件的记录查询name等为"黑马程序员"的文档
db.student.find({"name":"黑马程序员"})
3、投影查询只显示name和age两个key,_id主键不显示。
db.student.find({"name":"黑马程序员"},{name:1,age:1,_id:0})