欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MongoDB入门

程序员文章站 2022-05-08 14:54:07
...

环境变量

path

bin目录下

在根目录下创建一个文件夹DB 并cmd 输入mongod 启动mongodb服务器

     切换db位置 输入: mongod --dbpath D:\db

MongoDB入门

(启动数据库,并将此文件夹设置为db)

MongoDB入门

启动成功

修改服务端口(尽量4位以上)

MongoDB入门

mongod --dbpath (数据库路径) --port (最大不超过65535)

 

然后再打开一个cmd 输入mongo 连接mongodb出现 ">"

 --数据库(databse)

      数据库的服务器 用来保存数据 

---数据库的客户端

客户端操作服务器,对数据库进行CURD的操作

  -mongd来启动客户端

---将mongoDB设置为系统服务,可以自动后台启动不需要手动启动

Manually Create a Windows Service for  MongoDB Community Edition 手动创建一个MongoDB 社区版

①创建db 和 log 文件夹 

②创建配置文件和bin并肩的目下 mongod.cfg

      systemLog:

              destination:file

              path:c:\data\log\mongod.log

storage:

              dbpath:c:\data\db

③以管理员的身份运行cmd 执行如下命令

MongoDB入门

MongoDB入门

MongoDB入门

④如果失败上面操作失败,删除 

在控制台输入 sc delete Mongodb 删除之前的服务 重新再来一次

     ----------------------------------------------------------------------------------------------------------------------------------

三个重要的概念

数据库(database)

数据库是一个仓库,在仓库中可以存放集合

集合(collection)

  -集合类似数组,在集合中可以存放文档

文档(document)

-文档是数据库中的最小单位,我们存储和操作的内容都是文档

在MongoDB中 数据库在你是用的时候自动创建不用手动创建

 

 

基本指令

 1、show dbs 

  use 数据库名 

use test  进入指定的数据库 

看集合

show collections    显示数据库中集合

数据库的CURD操作

向数据库中插入文档

 db.<collection>.insert(doc)

    向集合中插入一个文档

    eg:

MongoDB入门

MongoDB入门

 

 

查看文档

db.<cllection>.find()

eg.

MongoDB入门

安装图形化界面

MongoDB入门

插入多条数据

db.collection.insert

 

MongoDB入门

修改数据

db.collection.update(查询条件,新对象)

db.stus.find({});

db.stus.update({name:"老沙"},{age:28});

MongoDB入门

MongoDB入门

使用修改操作符修改单条数据

$set 修改属性

$unset 删除 属性

db.collection.updateMany()

MongoDB入门

update默认至修改一条数据 (rug)如果有只修改第一条数据连个同名的默认zhixiuga

MongoDB入门

修改多个 方法一、

MongoDB入门

修改多个方法二、

MongoDB入门

删除操作

db.collection.remove()

              -remove ()可以根据条件来删除文档,传递条件

db.collection.deleteOne() 

db.collection.deleteMany()

db.stuts.remove({});清空集合 ,一次删一个

db.stuts.drop(); 集合删除 

db.dropDatabase() 删除数据库

 -- 一般数据库中的数据不会删除,所以删除方法很少用

 

--------------------------------------------------------------------------------------------------------------------------------

练习:

1.进入my_test数据库

use my_test

2.想数据库的user集合中插入一个文档

db.users.insert({username:"老李"});

3.查询user集合中的文档

db.users.find();

4.查询user集合中插入一个文档

db.users.find()

5.统计数据库user集合中的文档数量

db.users.find().count()

6.查询数据库user集合中username为“老李”的文档

db.users.find({username:"老李"})

7.查询数据user集合中username文档,添加一个address属性,属性值为大连

db.users.uodate({usernname:"老李"},{$set:{address:"大连"}}) 

8.使用{username:"老李"}替换username为老王的文档

db.users.replace({username:"老李"},{username:"老王"})

9.删除username中老李的address属性

db.users.uodate({username:"老王"},{$unset{address:1})

10.向username为老李文档中添加一个hobby:{cities:["北京","上海","深圳"],movies:["三国","记录"]}

MongDB的文档的属性值也可以是一个文档,当一个文档的属性是一个文档时,我们称为内嵌文档

db.users.update({username:"老李"},{$set:{hobby:{cities:["北京","上海","深圳"],movies:["三国","记录"]}});

10.向username为老唐的文档中,添加一个hobby:{{movies:["A Chinese Odyssey","King of come"]}}

db.users.update({username:"老唐",{$set:{hobby:{{movies:["A Chinese Odyssey","King of come"]}}}}})

11.查询喜欢电影“三国“”的文档 【属性的属性查找,但必须添加引号“”

db.users.find({"hobby.movies":"三国"})

12.向老唐中添加一个新的电影"大白鲨" 【数组添加】

//$push 用于向数组中添加新的元素   //$addToSet向数组中添加新元素

db.users.update({username:"老唐"},{$:set:{"hobby.movies":"大白鲨"}});// 全部修改了内容

db.users.update({username:"老唐"},{$:push:{"hobby.movies":"大白鲨"}});//不考虑重复内容

db.users.update({username:"老唐"},{$:addToSet:{"hobby.movies":"大白鲨"}});//考虑重复 ,添加失败

13.删除喜欢北京的用户

db.users.remove({"hobby.cities":"北京"})

14.删除user集合

db.users.remove({});//清空集合

db.users.drop();

15.想numbers中插入20000条数据

for (var i =1 ;i<=20000;i++){ //插入时间太慢

db.numbers.insert({num:i});

} ---方法执行2万边,插入2万调数据;   --方法执行2W遍,插入执行1遍

db.numbers.find();

db.numbers.remove({});

方法二、

var arr = [];

for (var i =1;i<=20000;i++){

 arr.push(num:i);

}

db.numbers.insert(arr);

15.查询numbers中num为500的文档

db.numbers.find({num:500})

16.查询numbers中num大于5000的文档

db.numbers.find({num:{$gt:5000}}) -----$gt >  、$gte >= 、$lt < 、 $lte<= 、 $eq =  $ne != 

17.查询numbers中num小于30的文档

db.numbers.find({num:{$lt:30}})

18.查询numbers中大于40小于50文档

db.numbers.find({num:{$gt:40,$lt:50}})

19查询numbers中大于19996的文档

db.numbers.find({number:{$gt:19996}})

20.查询numbers中前10条数据

db.numbers.find({num:{$lte:10}})

//limit可以设置数据上限

db.numbers.find().limit(10);     --db.numbers.find();这种开发中很少用

21.查询numbers中弟11条到20调数据

//分页数据的显示, 1--10  11-20 21 -30  

公式: skip((页面 -1) * 每页显示的条数).limit(每页显示的条数)

db.numbers.find().skip(10).limit(10)

 db.numbers.find().limit(10).skip(10)  //顺序调整

22查询numbers中弟21条到30条数据

db.numbers.find().skip(20).limit(10)

---------------------------------------------------------------------------------------------------------

文档之间的关系: 一对一(one to one )  一对多(one to many )  多对一(many to one)

//一对一
db.wifeAndHusband.insert(

  { 

       name :""黄蓉,
       husband: {
        name:"郭靖"
       }

  },
  { 

       name :""小龙女,
       husband: {
        name:"杨过"
       }

  }


)

//一对多 (用户订单)(文章评论)
db.user.insert([{

username:"老李"},{username:"老王"
}]);


db.order.insert({

list:["苹果","月饼"],
user_id:ObjectId("57677adssagyudsx12df");
});

//查找用户老李的订单
db.users.findOne({username:"老李"})
var userID = db.users.findOne({username:"老李"})
db.order.find(user_id:userID)


/*
  多对对
 分类 - 商品
 老师 -学生
*/

db.teachers.insert([
  {name:"洪七"},
  {name:"黄药师"},
  {name:"龟仙人"}

]);

db.stus.insert([
 {
   name:"郭靖"
   teach_ids:[
        ObjectId("21312dbshcsbdcsda32ewdcXZc"),
        ObjectId("21312dbshcsbdcsda32ewdcXZc")
 
    ]
 },
 {
   name:"老李"
   teach_ids:[
        ObjectId("21312dbshcsbdcsda32ewdcXZc"),
        ObjectId("21312dbshcsbdcsda32ewdcX0c"),
        ObjectId("21312dbshcsbdcsda32ewdcXlc")
 
    ]
 }
  


]);

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------练习

导入

MongoDB入门

 

 

 

MongoDB入门

MongoDB入门

1.将dept和emp集合导入到数据库中
2.查询工资小于2000的员工
   db.emp.find({sal:{$lt:2000}});
3.查询工资在1000---2000之间员工
db.emp.find({sal:{$gt:1000,$lt2000}})
4.查询工资小于1000或大于2500的员工
db.emp.find({$or[{sal:{$lt:1000}},{sal:{$gt:2500}}]});  //大于大的   小于小的
5.查询财务部(depno:10)的所有员工
var depno = db.dept.findOne({dname:"财务部"}).deptno
db.emp.find({depno:depno})

6.查询销售部的员工
var depno = db.dept.findOne({dname:"销售部"}).deptno
db.emp.find({depno:depno})
7.查询所哟偶mgr为7698的员工  ---查询注意数据类型 number char
db.emp.find({mgr:7698})
8.为所有薪资地域1000的员工增加给你工资400百元  ---inc 在原来的基础上自增 
db.emp.updateMany({sal:{$lte:1000}},{$inc:{sal:400}})

sort和投影

sort ()可以用来制定文档排序的规则,sort()需要传递一个对象来执行排序规则 1升序 -1降序

db.emp.find({}).sort({sal:1,empno:-1}) 

  1. //limit skip  sort 任意顺序 

//查询时,可以在第一个参数的位置设置查询的结果 投影 指定你想显示的字段

db.emp.find({},{ename:1,_id:0,sal:1});

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Mongoose

mongoose就是一个让我们可以通过Node来操作MongoDB的模块

Mongoose是一个对象文档模型(ODM)库,它对Node原生的MongoDB进一步优化封装并提供了更多的功能

在大多数型的情况下,它被用来吧结构化的模式应用到一个MongoDB集合,并提供了验证和类型转换

---文档转化为对象

  1. 给文件创建一个模式机构(Scherma)就是约束文档的结构 string 只能写string
  2. 可以对模型中对象/文档进行验证。
  3. 数据可以通过类型转换为对象模型
  4. 可以使用中间件来应用业务逻辑挂钩
  5. 比Node原生的MongoDB驱动更容易

Shcema(模式对象)

    Schema对象定义约束了数据库中的文档结构

Mode ---集合

  Model对象作为集合中的所有文档的表示,相当于MongoDB数据库的Collection

Document---文档

Document表示集合中的集体文档,相当于集合中的一个具体的文档

1、安装Mongoose

MongoDB入门

2、在项目中引入数据库 var mongoose = require("mongoose")

3、连接MongoDB数据库

如果端口好是默认的端口号(27017)则可以省略不写

4.断开数据碎连接(一般不需要调用)
mongoose.disconnect()

 

mongoose.connect('mongodb'://数据库ip地址:端口/数据库名'{userMongoClient:true})

--mongoose.connect('mongodb'://localhost/test'{userMongoClient:true})

 --监听MongoDB数据库的连接状态

  在mongoose对象中,有一个属性叫做connection,该对象表示的就是数据库连接

通过监听该对象的状态,可以来监听数据库的连接于断开

数据连接成功的事伴
mongoose.connction.once("open",function(){}});

数据库所开的事伴
mongoose.connction.once("close",function(){});

//引入

mongoose.js
//引入
var mongoose = require ("mongoose");
//连接数据库
mongoose.connect ("mongodb://127.0.0.1/mongoose_test",{useMongoClient:true});

mongoose.connection.once("open",function(){
    console.log("数据库连接成功!");

});
mongoose.connection.once("close",function(){
  console.log("数据库连接已经断开");
});
//断开数据库连接
mongoose.disconnect();

Schema
Model
Document

var mongoose = require("mongoose");
mongoose.connecte("mongodb://127.0.0.1/mongoose_test",{useMongoClient:true});
mongoose.connecton.once("open",function(){
 console.log("数据库连接成功")

});
//创建Schema(模式)对象
//
var Schema  = mongoose.Schema; 
var blogSchema = new Schema({
    title:String,
    author:String,
    body:String,
    comments:[{body:String,date:Date}],
    date:{type:Date,default:Date.now},
    hodden:Boolean,
    meta:{
        votes:Number,
        favs:number
    }
})
var stuSchema = new Schema({
    name:String,
    age:Number,
    gender:{
        type:String,
        default:"female"
    },
    address:String
});

//通过Schema创建Model[代表数据库中的集合]
//mongoose.model(modelName,schema);
//modelName 就是要映射的集合名 mongoose会自动的将集合名变为复数 “students”  是复数就不会变了
var StuModel = mongoose.mode("students",stuSchema);

//向数据库中插入一个文档
StuModel.create({
        name:"老李",
        age:10
        gender:"man"        
        address:"栖霞山"
},function(err){
    if(err){
    console.log("插入成功!")

    }
});

-----------------------------------------------------------------Mongoose 操作数据库CURD-----------------------------------------------------------------

//插入文档
var stuSchema = new Schema({
    name:String,
    age:Number,
    gender:{
    type:String,
    default:"female"
    },
address:String
});
var StuModel = mongoose.model("student",stuSchema);
/*
    有了Model,我们就可以来对数据库进行增删改查的操作了
    Model.create(doc(s),)
    -用了创建一个或多个文档并添加到数据库中
    参数:
        doc(s)可以是一个文档对象,也可以是一个文档对象的数据
        callback当操作完成以后调用回调函数          
*/
StuModel.create([
     {
          name:"老猪",
          age:22,
          gender:"male",
          address:"高园庄"
          
     },{
           name:"老唐",
           age:19,
           gender:"male",
           address:"长安街"
     }
],function(err){
     if(!err){
          console.log("插入成功!");
          console.log(arguments)
     }
});

 

------------------------------------------------------------------------查询操作--------------------------------------------------------------------------

/*
查询的:
     Model.find(conditions,)[projection],[options],[callback])
          -查询所有符合条件的文档
     Model.finById(id,[projection],[options],[callback])
          -根据文档的ID 属性查询文档
     Model.findOne([contions],[projection],[options],[callbcak])
          -查询符合条件的第一个文档 ,总会返回一个具体的文档对象 不是数组
          
     contions 查询条件
     projection 投影  
              -两种方式
                   {name:1 _id:0} 显示为1 不显示为0
                   "name -_id"
     options 查询选项(skip,limit)
     callback 回调函数,查询结果通过回调函数返回回调函数必须传,如果不传回调函数,压根不会查询
     
*/
StuModel.find({name:"老唐"},function(err,docs){
     
     if(!err)
     {
          console.log(docs);
     }
});
//查询一个
StuModel.find({name:"老唐"},function(err,docs){
     if(!err)
          {
              console.log(doc[0].name); //返回数组
          }
});
//查询所有的
StuModel.find({},function(err,docs){
     if(!err)
          {
              console.log(docs);
          }
     
     
});
//name 图例name
     StuModel.find({},{name:1,_id:0},function(err,docs){
          if(!err){
              console.log(docs);
          }
     });
//投影2
StuModel.find({},"name age" ,function(err,docs){
     if(!err)
          {
              console.log(docs);
          }
});
//影3 不要的前面加一个 ‘-’
StuModel.find({},"name age -_id" ,function(err,docs){
     if(!err)
          {
              console.log(docs);
          }
});
//条件查询 skip 跳过钱3个显示后面  【图例---skip 3】
StuModel.find({},"name age -_id",{skip:3},function(err,docs){  //skip: 3 跳过三个
     if(!err)
          {
              console.log(docs);
          }
});
//查询条件 skip limit  只显示一个 【图例-----limit&skip】
StuModel.find({},"name age -_id",{skip:3,limit:1},function(err,docs){
     if(!err)
          {
          console.log(docs);
          }
});
// findoOne查询一个 
StuModel.findoOne({},function(err,docs){ //这应该是docs 而应该是doc
     if(!err)
          {
              console.log(docs);
              console.log(docs.name);
              
              
          }
});
// findById
StuModel.finById("59c4c3cf4e548391467d38",function(err,doc){
     
     if(!err)
          {
              console.log(doc);
              //通过find()查询的结果,返回的对象,就是Document,文档对象
              //document 对象是Model的实例 [集合是谁就是谁的实例] docs就是StuModel的一个实例
          }
     
});

MongoDB入门

MongoDB入门

MongoDB入门

MongoDB入门MongoDB入门

MongoDB入门

 

------------------------------------------------------------------------------删除-------------------------------------------------------------------------------------

/*
  Model.remove(conditions,[callbcak])
  Model.deleteOne(conditons,[callback])
  Model.deleteMany(conditions,[callbcak]); //一般不需要回调函数
*/
StuModel.remove({name:"小白"},function(err){
     if(!err)
          {
              console.log("删除成功")
          }
});

----------------------------------------------------------------------------修改---------------------------------------------------------------------------------

/*
 修改
 	Model.update(conditions,doc,[options],[callback]);
 	Model.updateMany(conditions,doc,[options],[callback]);
 	Model.updateOne(conditions,doc,[options],[callback]);
 		参数:
 			conditions: 条件
 			doc:修改后的对象
 			callback 回调函数
 			
 	Model.replaceOne(conditions,doc,[options],[callback])		
 			
 */
//修改老唐的年龄为20岁
StuModel.updateOne({name:"老唐"},{$set:{age:20}},function(err){
	if(!err)
		{
			console.log("修改成功!");
			console.log(doc);
		}
});

---------------------------------------------------------------------统计文档数量---------------------------------------------------------------------------

/*
 * Model.count(conditions,[callback])
 */
StuModel.count({},function(err,count){
	
		if(!err)
			{
			console.log(count);   //4
			}
	
});

 

上一篇: MongoDB入门

下一篇: MongoDB入门