MongoDb 使用学习笔记


 --打开cmd命令窗口
     - 输入mongod 启动mongodb服务器
-- 再打开一个窗口
    - 输入mongo 连接mongodb 出现  >
  - 32 位注意:
       启动服务器是,需要输入如下内容
        mongod --storageEngine=mmapv1

       --dbpath     指定路径  --port  指定端口号
    --服务器
      用来保存数据
      mongod 用来启动服务器
 --- 客户端
    操作数据
     mongo 用来启动客户端
---将MongoDB设置为系统服务,可以自动在后台启动,不要每次手动启动
   1. 在c盘根目录创建data
   - 在data 下创建db和log 文件夹
   2 创建配置文件
      在目录 C:\Program Files\MongoDB\Server\4.2 添加一个配置文件
       mongod.cfg
   3. 以管理员身份打开命令行
   4 执行如下的命令:

    sc.exe create MongoDB binPath="\" C:\Program Files\MongoDB\Server\4.2\bin\mongod.exe\" --service --config=\"C:\Program Files\MongoDB\Server\4.2\mongod.cfg\"" DisplayName="MongoDB" start="auto"
    
     sc.exe create MongoDB binPath="\" mongodbin目录\mongod.exe\" --service --config=\"mongod安装目录\mongod.cfg\"" DisplayName="MongoDB" start="auto"

  5.启动mongdb 任务管理器-服务-找到MongoDb 右击 启动


  数据库(database)
    数据库是一个仓库,在仓库中存放集合
  集合(collection)
    集合类似于数组,在集合中可以存放文档
  文档(document)
   文档数据库中的最小单位,我们存储和操作的内容都是文档。
    在MongoDB中,数据库和集合都不需要手动创建,当我们创建文档时,如果文档所在的集合和数据库不存在会自动数据库和集合

---- 

  如何使用MongoDB 
     show databases/ show dbs 
       - 显示数据库

   use 数据库名  
      - 进入到指定的数据库中
   db 
    -查看当所处的数据库
   show collections  
      - 查看数据库中有几个集合
- 数据库的CRUD(增删改查)的操作
   向数据库中插入文档
     db.<collection>.insert(doc)
      - 向集合中插入一个文档
      - 例子:向test数据库中的stus 集合中插入一个新的学生对象
        {name:"孙悟空",age:18,gender:"男"}
      db.stus.insert({name:"孙悟空",age:18,gender:"男"})
====================================================
Mongoose 是一个让我们可以通过Node来操作MongoDB的模块。
  Mongoose 是一个对象文档模型(ODM)库,它对Node原生的MongoDB模块进行了进一步的优化封装,并提供了更多的功能。
在大多数情况下,它被用来把结构化的模式应用到一个MongoDB集合,并提供了验证和类型转换等好处。

Node 里面就有一个MongoDB,并提供了验证和类型转换等好处
  可以为文档创建一个模式结构(Schema)
  可以对模型中的对象/文档进行验证
  数据可以通过类型转换为对象模型
  可以使用中间件来应用业务逻辑挂钩
  比Node 原生的MongoDB 驱动更容易
== 
mongoose 中为我们提供了几个对象
  -Schema(模式对象)
   .schema对象定义约束了数据库中的文档结构
 -Model
   .model对象作为集合中的所有文档的展示,相当于MongoDB 数据库中的集合collection
 -Document
   document表示集合中的具体文档,相当于计划中的一个具体的文档。

二、 使用中的试题例子

  

//  1.进入my_test数据库 
 use my_test;

// 2. 向数据库的user 集合中插入一个稳定
 db.users.insert({username:"sunwukong"})
 
show dbs;

// 3. 查询user集合中的文档

db.users.find();

// 4. 向数据库的user集合中插入一个文档
db.users.insertOne({username:"zhubajie"})
// 5. 查询数据库user集合中的文档
db.users.find();
// 6. 统计数据库user集合中的文档数量

db.users.find().count()
// 7.查询数据库user集合中username为sunwukong的文档

db.users.find({username:"sunwukong"})
// 8.向数据库user集合中的username为sunwukong的文档,添加一个address属性,属性值为huaguoshan

db.users.update({username:"sunwukong"},{$set:{address:"huaguoshan"}})
// 9.使用{username:"tangseng"}替换username为zhubajie的文档
db.users.replaceOne({username:"zhubajie"},{username:"tangseng"})


// 10.删除username 为sunwukong的文档的address属性
db.users.update({username:"sunwukong"},{$unset:{address:1}})

// 11.向username为sunwukong的文档中,添加一个hobby:{cities:["beijing","shanghai","shenzhen"],moves:["sanguo","hero"]}
// mongoDb 的文档属性也可以是一个文档,当一个文档的属性是
db.users.update({username:"sunwukong"},{$set:{hobby:{cities:["beijing","shanghai","shenzhen"],moves:["sanguo","hero"]}}})
db.users.update({username:"sunwukong"},{$unset:{cities:1,moves:1}});

// 12 向usernaeme 为tangseng的文档中,添加一个hoby:{movies:[{"A Chinese Odyssey","King of"}]}
db.users.update({username:"tangseng"},{$set:{hobby:{movies:["A Chinese Odyssey","King of comedy"]}}})


// 13.查询喜欢电影hero的文档
// MongoDB 支持直接通过内嵌文档属性进行查询,如果要查询内嵌文档则可以通过。的形式匹配
// 如果要通过内嵌文档进行查询,此时属性名必须使用引号
db.users.find({'hobby.moves':"hero"});

//14. 向唐僧添加一个电影Interatellar
// $push 用于向数据中家人一个新的元素
// $addToSet 向数组中添加一个新元素,如果数组中存在了该元素则添加失败则不会添加
db.users.update({username:"tangseng"},{$addToSet:{"hobby.movies":"Interatellar"}});
db.users.update({username:"tangseng"},{$push:{"hobby.movies":"Interatellar"}});

// 15. 删除喜欢北京的用户
db.users.remove({"hobby.cities":"beijing"});
// 16. 删除user集合
db.users.remove({});
db.users.drop();
db.users.find();
show dbs;

// 17. 向numbers中插入20000条数据
use numbers2;
db.numbers.insert({num:1});
 for(var i=1; i<=200;i++){
 db.numbers2.insert({num:i})
 }
 
 db.numbers2.find().count();
 
 db.numbers2.find();
 
 db.numbers2.drop({});
 
 use numbers2;
 var arr = [];
 for(var i=1; i<= 20000; i++){
  arr.push({num:i});
 }
 db.numbers2.insert(arr);
 
 show dbs;
 
 //19. 查询numbers中num为500的文档
 db.numbers2.find({num:{$eq:500}})
 
 //20查询numbers2 中num 小于30
 db.numbers2.find({num:{$lt:30}});
 
 //21 查询numbers中num大于40小于50的文档
 db.numbers2.find({num:{$gt:40,$lt:5}});
 
 //22 查询numbers中num大于1999的文档
 db.numbers2.find({num:{$gt:1999}});
 
 // 23.查询numbers2 中的前10条数据
 // limit()设置数据显示的上限
 db.numbers2.find().limit(10);
 
 // 24. 查询number2 集合中第11条到20条数据 
 // skip() 用于跳过指定数量的数据
 /*  分页 每页显示10条
   1-10    0
   11-20   10
   21-30   20
   31-40   30
     skip((页码-1)*每页显示条数).limit(每页显示条数);
     MongoDb 会自动调整skip和limit的位置
     
   */
 db.numbers2.find().skip(10).limit(20);

/**
 * 文档之间的关系
   一对一 (one to one)
      在mongoDb 可以通过内嵌文档的形式提现出一对一的关系
   一对多 (one to many)
   父母 - 孩子
   用户 - 订单
   文章 - 评论
     也可以通过内嵌文档映射一对多
   多对多 (many to many)
    -分类  - 商品
    -老师  - 学生
*/
use wifeAndHusband;
// 1.文档内嵌 一对一
db.wifeAndHusband.insert(
[{
   name: "黄蓉",
   husband:{
      name: "郭靖",
   }
},
{
  name: "潘金莲",
  husband:{
    name:"武大郎"
  }
}]
);

db.wifeAndHusband.remove({"id":"603072dd2f32244df3485e55"});
db.wifeAndHusband.drop({});
db.wifeAndHusband.find();

// 2 一对多 用户(users) 和订单(orders)
db.users.insert([{
 username:"swk"
},{
 username:"zbj"
}]);

db.order.insert({
   list:["苹果","香蕉","大鸭梨"],
   user_id:ObjectId("603077172f32244df3485e5c"),
 });
 
  db.order.insert({
   list:["牛肉","漫画"],
   user_id:ObjectId("603077172f32244df3485e5c"),
 });
 
 db.order.insert({
   list:["西瓜","香蕉"],
   user_id:ObjectId("603077172f32244df3485e5d"),
 });
 
db.users.findOne({username:"swk"})._id;
 
 // 查询孙悟空的订单
 var user_id = db.users.findOne({username:"swk"})._id;
 db.order.find({user_id:user_id});
 
db.users.find();

db.order.find();

// 多对多
db.teachers.insert([
{name:"洪七公"},
{name:"黄药师"},
{name:"龟仙人"},
]);

db.stu.insert([
{
 name:"郭靖",
 tech_ids:[
   ObjectId("6030c7869d29e4c13cd004ff"),
   ObjectId("6030c7869d29e4c13cd00500")
 ]
}
]);
// 33 为所有薪资低于1000的员工增加工资400元
// $inc 对某个值自增
db.emp.updateMany({sal:{$le:1000}},{$inc:{sal:400}});

// $inc 
db.teachers.find();

db.emp.insert([
    {
        "empno": 7867,
        "ename": "李凌",
        "job": "职员",
        "mgr": 7902,
        "hiredate": "1987-07-01",
        "sal": 700,
        "deptno": 20,
        "commo": 500
    },
    {
        "empno": 7369,
        "ename": "林冲",
        "job": "职员",
        "mgr": 7903,
        "hiredate": "1987-07-01",
        "sal": 600,
        "deptno": 20,
        "commo": 500
    },
    {
        "empno": 7369,
        "ename": "度三娘",
        "job": "销售",
        "mgr": 7903,
        "hiredate": "1987-07-01",
        "sal": 890,
        "deptno": 20,
        "commo": 500
    },
    {
        "empno": 7654,
        "ename": "潘金莲",
        "job": "销售",
        "mgr": 7903,
        "hiredate": "1987-07-01",
        "sal": 1100,
        "deptno": 20,
        "commo": 500
    },
  {
 "empno":7934,
  "ename":"鲁智深",
  "job":"销售",
  "mgr":7934,
  "hiredate":"1987-07-01",
  "sal":800,
  "deptno":20,
  "commo":500

},{
 "empno":7900,
  "ename":"武松",
  "job":"销售",
  "mgr":7900,
  "hiredate":"1987-07-01",
  "sal":800,
  "deptno":20,
  "commo":500

}
]);

// sort 可以任意的顺序 1 表示升序, -1 表示降序
db.emp.find({}).sort({sal:1,empno:-1});
// 查询投影,查询部分字段
db.emp.find({},{ename:1});
db.emp.insert({sal:"hello"});
db.emp.find();
use mongoose_test;
db.students.find();

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章