软件测试课程(二):MongoDB课程笔记——基本命令

星期四和星期五上了两次课,共两小时,主要学习了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});