星期四和星期五上了两次课,共两小时,主要学习了MongoDB的基本命令,总结起来就是增删改查,现笔记归纳如下:
一、下载MongoDB和navicat for mongodb.exe,MongoDB安装一路点击next即可安装,navicat安装后为14天试用期,可以使用虚拟机快照方式无限期使用。
二、基本命令
(1)查看所有的数据库列表:show dbs;
(2)建数据库:use test1;
(3)显示当前数据库下的集合:show collections;
(4)创建集合并添加数据:db.col.insert({});
(5)查看集合里的文档:db.col.find();
(6)文档的插入:db.col.insert()
三、增(数据增加)
插入单个文档:db.col.insert({a:1,b:2,c:3}); |
一次性的往集合里添加多个文档(以数组的方式插入:[{},{},{}]):db.col.insert([{m:1},{n:20},{z:300}]); |
当给同一个键赋多个值时,取最后一个值(这里取最后的c);db.col.insert({name:"a",name:"b",name:"c"}); |
允许重复插入两次{x:1},由于系统会自动给它分配不同的_id,不同的_id就代表不同的文档:db.col.insert({x:1}); |
允许用户自定义_id,但不允许两次取值相同:db.col1.insert({_id:2,xyz:20}); |
通过循环的方式可以插入多个文档:for(i=1;i<=5;i++){db.col2.insert({x:i});} |
四、删(数据删除)
- 删除一条数据:db.product.deleteOne({item:"ticket"});
- 删除多条数据:db.product.deleteMany({item:"music"});
- 删除所有数据:db.product.deleteMany({});
- 删除文档字段:db.product.updateMany({item:"ticket"},{$unset:{stockes:1}});
五、改(数据更新)
- 更新一个文档,如将名字为fanghua的商品的价格更新为55:db.product.update({name:"maoyaozhuan"},{$set:{price:55}});//只更新price。
- 更新多个文档,如将所有的电影票的库存更新为150:db.product.updateMany({item:"ticket"},{$set:{stocks:150}});
- 将文档的字段删除:db.product.updateMany({item:"ticket"},{$unset:{stockes:1}});
- 将所有商品价格涨价/降价5块钱:db.product.updateMany({},{$inc:{price:5}});db.product.updateMany({},{$inc:{price:-5}});
- 字段追加:db.product.updateMany({},{$set:{tag:10}});
六、查(查询数据)
单个条件的文档的查询 |
- 查询导演是张艺谋的商品信息:db.product.find({director:{$eq:"zhangyimou"}});//$eq:$equal 相等的
- 查询导演不是张艺谋的商品信息:db.product.find({director:{$ne:"zhangyimou"}});//$ne:$not equal 不等的
- 查询价格高于280的商品信息:db.product.find({price:{$gt:280}});//$gt:$greater than 比……大
- 查询价格低于280的商品信息:db.product.find({price:{$lt:280}});//$lt:$lower than 比……小
- 查询价格大于等于280的商品信息:db.product.find({price:{$gte:280}});//$gte:$greater than,equal 比……大以及相等
- 查询价格小于等于280的商品信息:db.product.find({price:{$lte:280}});
- 查询商品类型是电影票和音乐专辑的商品:db.product.find({item:{$in:["ticket","music"]}});
- 查询商品类型不是电影票和音乐专辑的商品:db.product.find({item:{$nin:["ticket","music"]}});//$nin:not in 不在某个范围里
|
多个条件的文档的查询 |
- 查询价格在40-280(包含边界)之间的商品信息:db.product.find({price:{$gte:40,$lte:280}});或:db.product.find({$and:[{price:{$gte:40}},{price:{$lte:280}}]});
- 查询商品类型是电影票并且导演是冯小刚的商品信息:db.product.find({item:"ticket",director:"fengxiaogang"});或:db.product.find({$and:[{item:"ticket"},{director:"fengxiaogang"}]});
- 查询商品的类型是电影票或者价格高于280的商品信息:db.product.find({$or:[{item:"ticket"},{price:{$gt:280}}]});
|
查询内嵌文档 |
- 查询商品尺寸满足长度为75,宽度为50,度量单位为cm的商品信息:
- 只匹配内嵌文档的内嵌字段,如查询尺寸单位是cm的商品:db.product.find({"size.uom":"cm"});//此处的size.uom必须用引号包裹,否则报错
- 查询宽度大于15的商品信息:db.product.find({"size.width":{$gt:15}});
- 查询同时满足长度为75,宽度为50的商品信息db.product.find({"size.length":75,"size.width":50});或:db.product.find({$and:[{"size.length":75},{"size.width":50}]});
|
查询数组 |
- 精确匹配(数组包含的元素及其顺序都要匹配),如查询tags只包含red和blank,且red在前blank在后的商品信息:db.inventory.find({tags:["red","blank"]});
- 非精确匹配(有其他元素以及顺序不一样也要查找得到),需要使用$all操作符,如查询tags包含red和blank,且顺序无所谓有没有其他元素也无所谓的商品信息:db.inventory.find({tags:{$all:["red","blank"]}});
- 查找数组dim_cm的第二个元素的值大于25的记录:db.inventory.find({"dim_cm.1":{$gt:25}});//数组是有编号的,编号从0开始,第一个元素为0,第二个为1,以此类催,第n个元素的编号是n-1)
|
查询包含内嵌文档的数组 |
- 查询仓库为A,数量为5的商品信息:db.inventory2.find({instock:{warehouse:"A",qty:5}});此种情况,如若内嵌文档的顺序不匹配,则无法查询出来
- 查询instock同时满足qty为5,warehouse为A的记录(顺序无所谓):db.inventory2.find({instock:{$elemMatch:{qty:5,warehouse:"A"}}});
- 查询instock数组的第一个元素的qty的值小于等于20的记录:db.inventory2.find({"instock.0.qty":{$lte:20}});
- 查询instock数组的任一内嵌文档包含qty值大于等于20的记录:db.inventory2.find({"instock.qty":{$gte:20}});
|
查询特定字段 |
- 查询所有字段:db.product.find();或db.product.find({item:"ticket"});
- 查询指定的字段和_id字段:查询电影票的名字和票价(包括_id):db.product.find({item:"ticket"},{name:1,price:1});
- 查询电影票的名字和票价(不包括_id):db.product.find({item:"ticket"},{name:1,price:1,_id:0});
- 查询电影票的信息,不包含名字和票价:db.product.find({item:"ticket"},{name:0,price:0});
- 在嵌入式文档中返回特定字段:db.product.find({item:"dress"},{"size.uom":1});
- 在嵌入的数组里返回特定字段(注:此处比较特殊,通过actor.0 不能取到数组第一个元素,需要借助操作符$slice):db.product.find({item:"ticket"},{_id:0,name:1,"actor":{$slice:1}});
|
查询的排序显示:sort() |
- 按价格升序:db.product.find().sort({price:1});
- 按价格降序:db.product.find().sort({price:-1});
- 先按库存在升序排序,如果库存相同,则按价格降序排序:db.product.find().sort({stocks:1,price:-1});
|