一、连接数据库
如果只在windows下使用:进入数据库命令:mongo
如果windows要连接虚拟机(服务器),命令:mongo 服务器IP地址:27017
Mongodb ‘无状态模式’,不用去设计,直接用,存什么东西,取决于前边传什么,后边就存什么。
中文文档:http://docs.mongoing.com/
英文文档:https://docs.mongodb.com/manual/
二、数据库相关操作
1、获取当前你正在使用的数据库:db.getName() 或是db
2、查看已有的数据库(显示所有的数据库):show dbs 或 show databases
3、选择数据库:use 库名
注意:use了一个不存在的数据库,会自动的进行创建该数据库,下面例子中:xk是不存在的库名,goods是集合名,
可自己直接写,进行创建,这样数据库和集合都创建完毕:
如果不对该数据库进行任何的操作,该数据库不会创建成功。
4、删除数据库:(必须先选择数据库,再删除)
5、查看数据库状态:db.stats() ---选择数据库,再查看
6、查看数据库相关帮助信息
三、集合的操作
1、查看当前数据库已有的集合 show tables; 或show collections;
2、集合的创建:
注意:如果use了一个不存在的数据库,依旧可以在里面创建集合。
system.indexes是系统自带的。
3、集合的删除
如果删除一个不存在的集合,则返回false。
4、创建集合,插入文档
① 注意:可以use一个不存在的数据库,然后,直接使用db.集合名.insert()语句进行插入数据信息。
② 也可以下面这样一步一步的来:(字典形式) 用 find 查询内容
说明:插入记录成功以后,mongodb会默认为每一个文档都添加一个_id的字段,并且同一集合中的_id是唯一的。
5、查看集合里的具体数据:
db.集合名.find()
下面这种查出来美观:
6、集合的命名:
① 不能是空字符串(“ ”)
② 不能包含\0字符(空字符)
③ 不能使用system.的前缀(系统保留)
④ 建议不包含保留字 ”$”
⑤ 用.分割不同命名空间的子集合(如:blog.users, blog.posts)
四、写入数据 ” ”记住都写上,省着分写上还是不写
内容里必须都加上({ })
1、普通数据的添加
Json格式 Bson格式,类json格式
① 插入多条数据
一条一条的这种形式多次插入数据:
这种插入数据,键可写“”,也可不写“”最好都写上
一次性插入多条数据:
语法格式:db.goods.insert([{},{},{}.......]) 键值都加“”号
2、多维数据对象添加:db.goods.insert({{} }) {}里嵌套{ }
3、 数组信息的添加db.goods.insert({{} ,[ ] })
五、保存数据(修改数据)
语法:db.集合名称.save(文档)
特点:_id如果数据不存在则添加,如果数据存在则修改。(_id不写,也会默认添加,如果修改必须加_id)
如果在保存数据的时候,所指定的id是存在的,则是修改数据
六、数据查询
1、笼统方式查询
① db.数据表.find() 查询数据表的全部数据
② db.数据表.findOne() 查询数据表的第一条数据
③ db.数据表.find().pretty() 以美观的方式输出
2、条件限制查询(只要是条件都必须加{})
① db.数据表.find(条件)
② db.数据表.findOne(条件)
有相同信息时,返回满足结果里的第一条信息
3、范围条件查询
关键字:$gt $lt $gte $lte
注意:关键字$gt左右必须有引号,在命令行:单双引号都可以。
① $gt大于
查找集合中价格大于1200的
② $gte大于等于
查找集合中价格大于等于1200的
③ $lt小于
查找集合中价格小于1999的
④ $lte小于等于
查找集合中价格小于等于1999的
4、设置多个查询条件
①例如:价格大于1000,并且重量等于50
db.goods.find({price:{'$gt':1000},weight:50})
②例如:价格小于等于1999并且重量大于134
5、多维字段的查询(({{}})有嵌套时必须加” ’’)
①db.表.find({‘key.name’:值})
注意:key.name必须要使用引号进行引住。
② db.表.find({key.name:{‘$gt’:值}})
③ db.表.find({key.name:{‘$gt’:值},key2.name2:{‘$lt’:值}})
6、数组条件的限制(里面有数组[ ],满足一个条件即可)
① db.表.find({数组的那个字段名:val})
这种形式的:
//查询颜色有红色记录条数,满足一个元素即可
② 这种查法是color必须只有黑、白、红,而且顺序必须是存储文档的那个顺序。
③ db.表.find({字段(数组):{‘$all’:[v1,v2]}})
//只要同时满足有黑色和白色就可以查询出来
7、限制查询字段(查询部分字段)
db.表.find({条件},{字段:1/0,字段:1/0}
1: 查询此字段
0: 排除此字段
find()方法的第一个参数必须要有,如果没有条件的话,就是{}
① 只查询name字段:
注意:_id这个字段是默认显示出来的。如果不想让_id这个字段显示出来,可以下面这样:
规则:要输出就全部输出,要不输出就全部不输出;_id除外,可以随意设置0,1 ;一个0一个1报错:要是0都是0,要是1都是1。
设置为全部输出
设置为全部不输出
② $or查询,多个条件,满足其一即可
③ $in和$nin:在数组/不在数组
④ $all 查询:表示完全匹配
$in 与 $all的区别
使用$in进行查询:只要含有数组里的就行。
再使用$all进行查询:数组里的必须同时满足才行:必须是数组
8、(了解)自定义条件:$where
$where:通过函数自定义条件[JS函数],在指定的函数中,返回boolean类型的值,this表示每个要查询的文档。
9、数据查询---限制查询条数
限制查询5条记录
10、数据查询--跳过记录行数,(从1开始数的)
下面命令的意思是说:skip(2)是跳过前两行记录,limit(2)显示后面的两条记录。
从第三条信息开始显示的,且只显示2条
11、分页查询(重点)
现在我想显示第5页的数据:
第一页的数据是:0 1
第二页的数据是:2 3
第三页的数据是:4 5
第四页的数据是:6 7
第五页的数据是:8 9
所以skip()方法里面的参数值的公式:2(n-1)
12、数据查询---排序
① 1表示升序:
按照价格升序
② -1表示降序:
按照价格降序:
13、数据查询---统计个数 count
14、数据查询--去重 distinct
给价格去重:
即给价格去重,又满足数字为45的
七、修改数据
1、有$set的修改:只修改设置的字段,其他字段不变化
把名字为小花的修改成name为小刚
F5视图软件刷新一下,可看见改了数据
2、没有$set的修改:只修改设置的字段,没有修改的字段就会删除了(除了_id字段)
八、删除数据 remove
1、一次删除多条数据(有多条符合条件的数据都删掉),
由于默认为false,所以可以省略此参数
2、一次只删除一条数据:加上true
3、清空所有的数据
4、删除字段 $unset
db.表.update({条件},{‘$unset’:{字段:1/字段:0}})
注意:设置的字段0或是1都是可以进行删除此字段的。
现在再查看:会看到把name 和price字段删了
九、扩展:修改数据
MongoDB这个产品是基于js引擎开发出来的。
1、修改器的使用($set、$inc等)
① 通过修改器$set将zs3的年龄修改为33,其它值不变
注意:修改器名称的引号可加可不加,在这里统一下,添加上吧。
② 给zs10的年龄增加两岁 $inc
③ 第三个参数的使用 true
当我们再修改数据时,如果没有符合条件的,就直接新增加一条数据。
不写第三个参数时,默认false,不添加。
写上true,会添加上数据
④ 测试一次修改多条(第四个参数的使用)
如果一次性有多条数据满足要求时,那么第四个参数设为true时,就全部修改了。
也就是:第四个参数:默认false,只修改一条,为true时,修改多条数据。
把name为zs2的age修改为250:
2、练习实例
① 查询所有的男生数据(只需要学生的姓名和年龄)
限制字段查询:
② 查询成绩及格的学生信息(学生成绩大于或等于60分)
③ 查询所有18岁的男生和16岁的女生的数据
④ 按照学生的年龄进行排序
升序
降序
⑤ 将所有的学生年龄增加2岁(每个增加一遍)
格式:给zs10这个同学年龄增加2岁,其它的同学再写