博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MongoDB介绍以及安装和CRUD操作实例
阅读量:4165 次
发布时间:2019-05-26

本文共 6587 字,大约阅读时间需要 21 分钟。

MongoDB介绍以及安装和CRUD操作实例

一、基本信息

数据库主要分成两种:

一、关系型数据库(RDBMS)
·MySQL、Oracle、DB2、SQL Server……
·关系数据库中全都是表
二、非关系型数据库
·MongoDB、Redis……
·键值对数据库
·文档数据库MongoDB

MongoDB的数据模型是面向文档的,所谓文档是一种类似于JSON的结构,简单理解MongoDB这个数据库中存的是各种各样的JSON。(BSON—二进制的 JSON)

1.数据库(database)

数据库是一个仓库,在仓库中可以存放集合
2.集合(collection)
集合类似于数组,在集合中可以存放文档
3.文档(document)
文档数据库中的最小单位,我们存储和操作的内容都是文档。

·MongoDB安装包下载地址:

·MongoDB的版本偶数版本为稳定版,奇数版本为开发版。

·MongoDB对于32位系统支持不佳,所3.2版本以后没有再对32位系统的支持。

一、安装MongoDB

二、配置环境变量

​ 1.找到安装目录 D:\software\MongoDB\Server\3.6\bin

2.添加环境变量

3.检查安装成功没有

在c盘 根目录下创建一个 文件夹 data 再在data下面创建一个文件夹db

4.启动 MongoDB 服务器 (数据库的服务器,用来存储数据的)

​ 启动方法一:打开cmd 命令窗口,输入 mongod 启动 mongodb 服务器

​ 启动方法二:若想要自定义数据存储位置 和 MongoDB 服务器使用的 端口号

​ 则启动时候可以输入 mongod --dpath D:\data\db --port 123

5.连接MongoDB服务器(数据库的客户端,用来操作数据)

​ 第4步的窗口不要关闭,再打开一个 cmd 命令窗口,输入 mongo 结尾处出现 “ > ” 则表示连接成功

将MongoDB设置为系统服务,可以自动在后台启动,不需要每次都手动重启

二、设置在后台启动MongoDB

1.在 D 盘根目录下创建 文件夹

cd D:\mkdir D:\data\dbmkdir D:\data\log

2.在安装目录下面创建配置文件

D:\software\MongoDB\Server\3.6\mongod.cfg

3.在配置文件中添加内容,写 日志路径 和 数据存储路径

systemLog:  destination: "file"  path: "c:\\data\\log\\mongod.log"storage:  dbPath: "c:\\data\\db"

4.以管理员方式打开cmd ,执行以下命令

sc.exe create MongoDB binPath= "\"D:\software\MongoDB\Server\3.6\bin\mongod.exe\" --service --config=\"D:\software\MongoDB\Server\3.6\mongod.cfg\"" DisplayName= "MongoDB" start= auto

5.启动MongoDB 服务,打开 任务管理器 ,找到 MongoDB 服务 右键启动

6.如果启动失败,证明上边的操作有误,在控制台输入 sc delete MongoDB 删除之前配置的服务然后从第一步再来一次

三、MongoDB 基本命令

查看几个数据

show dbs

进入数据库

use 数据库名

查看当前所在数据库

db

查看数据库中有几个集合

show collections

**注意:**在MongoDB中不需要手动创建 数据库集合,当我们在创建文档时,如果文档所在的集合或数据库不存在 则 自动创建数据库 和 集合

数据库的CRUD的操作 官网文档

操作语法文档下载路径:

  • 向数据库中插入文档 db 代表当前数据库

    db.集合名.insertOne(doc)

    例:

    db.inventory.insertOne(   {
    item: "canvas", qty: 100, tags: ["cotton"], size: {
    h: 28, w: 35.5, uom: "cm" } })/* 插入数据*/db.inventory.insert([ {
    name:"测试",age:18,sex:0,hobby:"篮球",test:true}, {
    name:"测试2",age:19,sex:1,hobby:"篮球2",test:false}, {
    name:"测试3",age:20,sex:0,hobby:"篮球3",test:true}]);/* 查询 */db.inventory.find({
    });/* 调用此方法可以生成id */ObjectId();/* 可以自定义id */db.inventory.insert( {
    _id:"helloworld",name:"测试",age:18,sex:0,hobby:"篮球",test:true} )
    # 插入的方法db.collection.insertOne()	插入 一个 文档到 一个集合db.collection.insertMany()	插入 多个 文档到 一个集合db.collection.insert()	    插入 一个 或 多个 文档到 一个集合
  • 查询数据

    /*    查询 在find 里面输入查询条件    find()     返回的是一个数组    findOne()  返回的是一个对象*/db.inventory.find({
    });/* 取返回数组的第一个对象 */db.inventory.find({
    age:18})[0];db.inventory.find({
    age:18})[0].name;/* 多条件查询 */db.inventory.find({
    age:18,_id:"helloworld"});/* findOne 返回的是一个对象 */db.inventory.findOne({
    age:18}).name;/* .count() 是统计数目 */db.inventory.find({
    age:18}).count();
  • 修改操作

    /*    修改     db.collection.update(查询条件,新对象)       update() 默认情况下会使用新对象来替换旧的对象, update()  默认情况只会修改一个       如果需要修改指定的属性 $set:{
    } $unset:{
    } 可以用来删除文档的指定属性*/db.inventory.find();/* - update() 默认情况下会使用新对象来替换旧的对象 */db.inventory.update({
    _id:"helloworld"},{
    age:20});/* 如果需要修改指定的属性 $set:{
    } */db.inventory.update( {
    _id:"helloworld"}, {
    $set:{
    age:21, name:"姓名" }});/* $unset:{
    } 可以用来删除文档的指定属性 */db.inventory.update( {
    _id:"helloworld"}, {
    $unset:{
    hobby:"123" }});/* updateMany 可以修改多个 */db.inventory.updateMany( {
    age:18}, {
    $set:{
    hobby:"123" }});/* update 加上 multi属性后可以修改多个 */db.inventory.update( {
    age:18}, {
    $set:{
    hobby:"234" }}, {
    multi:true });
  • 删除数据

    /*	db.collection.remove()	db.collection.deleteOne()	db.collection.deleteMany()*//* 默认情况会删除符合条件的多个 */db.inventory.remove({
    age:18});/* 若果用remove删除一个 后面加一个boolean值是否删除一个 则 */db.inventory.remove({
    age:18}, true);/* 删除 集合 */db.inventory.drop();/* 删除当前数据库 */db.dropDatabase();

    部分高级查询:

    //13.查尊喜欢电影hero的文档//MongoDB支直接通过内获文档的属性进行查询,如果要查询内鼓文档则可以通过。的形式来匹配//如果要通过内蒙文档来对文档进行查询,此时属性名必须使用引号db.users.find({
    'hobby.movies':"hero"});//14.向tangsengp添加一个新的电影Interstellar//$push 用于向数组中添加一个薪的元素//$addToSet 用于向数组中添加一个薪的元素,但是不会重复,若存在重复的则 不会再添加db.users.update({
    username:"tangseng"},{
    $push:{
    "hobby.movies":"Interstellar"}});db.users.update({
    username:"tangseng"},{
    $addToSet:{
    "hobby.movies":"Interstellar"}});//17.向numbers中插入20000条数for(var i=l;i<=20000;i++){
    db.numbers.insert({
    num:i})};var arr = [];for (var i=1 ; i <= 20000 ; i++) {
    arr.push({
    num:i});}db.numbers.insert(arr);//21.查尊numbers中 numt于40小于50的文档db.numbers.find({
    num:{
    $gt:40,$1t:50}});// limit() 设置显示数据的上限// 查看前 10 条db.numbers.find().limit(10);// 查看第 11 到 20// skip( (页码 -1)* 每页显示条数) ).limit(每页显示条数)db.numbers.find().skip(10).limit(10);

部分高级练习:

/* 27.查询工资小于2000的员工 */db.emp.find({
sal:{
$lt:2000}});/* 28.查询工资在1000-2000之间的员工 */db.emp.find({
sal:{
$gt:1000,$lt:2000}});/* 29.查询工资小于1000或大于2500的员工 lt 小于 gt 大于 */db.emp.find({
$or:[{
sal:{
$lt:1000}},{
sal:{
$gt:2500}}]});/* 30.查询财务部的所有员工 */var deptno = db.dept.findOne({
dname:"财务部"}).deptno;db.emp.find({
depno:deptno});/* 32.查询所有mgr为7698的所有员工 */db.emp.find({
mgr:7698});/* 多条件查询 */db.emp.find({
mgr:7698,empno:7499});/* 33.为所有薪资低于1000的员工增加工资400元 inc 自增*/db.emp.updateMany({
sal:{
$lte:1000}},{
$inc:{
sal:400}});/* sort() 可以用来指定文档的排序规则,sort() 需要传递一个对象来指定排序规则 *//* 1表示升序 -1表示降序 */db.emp.find({
}).sort({
sal:1,empno:-1});// limit skip sort 可以任意的顺序进行调用 skip 和 limit 用来分页 例:当前页从1开始 skip((当前页数-1)*每页显示条数).limit(每页显示条数)db.emp.find({
}).sort({
sal:1,empno:-1}).skip(0).limit(10);// 在查询时,可以在 第二个参数的位置 来设置查询结果 投影 id默认都会显示db.emp.find({
},{
ename:1});// 显示 name 和 sal _id为0则表示不显示db.emp.find({
},{
ename:1,_id:0,sal:2});

MongoDB 图形化管理工具 https://www.mongodbmanager.com/download

MongoDB中的数据关系:

/*	一对一 one to one	一对多 one to many  / 多对一 many to one	多对多 many to many*//* 一对一 */db.wifeAndHusband.insert([	{
name:"黄蓉”, husband:{ name:"郭靖" } }, { name:"A同学”, husband:{
name:"B同学" } }]);/* 一对多 用户 和 订单 */db.users.insert([ {
username:"swk" },{
username:"zbj" }]);db.order.insert({
list:["苹果”,”香蒸”,”大鸭梨”], user_id:ObjectId("59c47e35241d8d36ald50ddf")});//查拨用户SWk的订单var user_id=db.users.findOne({username:"zbj"})._id;db.order.find({user_id:user_id});/* 多对多 */db.teachers.insert([ {name:"洪七公"}, {name:"黄药师"}, {name:"龟仙人"}]);db.stus.insert([ { name:"郭靖”, tech_ids:[ ObjectId("59c4806d241d8d36ald50de4"), ObjectId("59c4806d241d8d36a1d50de5") ] }, {
name:"孙福空”, tech_ids:[ ObjectId("59c4806d241d8d36ald50dfr3"), ObjectId("59c4806d241d8d36a1d50dc6") ] }]);

转载地址:http://zhxxi.baihongyu.com/

你可能感兴趣的文章
二维码生成、扫描、图片识别(Zxing)
查看>>
github的README.md编写
查看>>
Android手机Fiddler2抓包教程
查看>>
Android进阶系列之事件分发详解
查看>>
Android进阶系列之源码分析Activity的启动流程
查看>>
Retrofit谷歌官方详解
查看>>
Android进阶系列之Support Annotation Library使用详解
查看>>
Android进阶系列之AOP面向切面编程
查看>>
Android进阶系列之源码SDK单例模式运用
查看>>
Android进阶系列之源码分析AlertDialog建造者模式
查看>>
Android进阶系列之源码分析事件分发责任链模式
查看>>
Android进阶系列之Percent Support Library使用详解
查看>>
Android进阶系列--Design Support Library使用详解(Snackbar,TextInputLayout,TabLayout,NavigationView...)
查看>>
设计模式学习之路--解释器模式
查看>>
Android进阶系列--源码分析模板方法模式在AsyncTask的运用
查看>>
Android进阶系列--源码分析观察者模式在ListView的运用
查看>>
Rxjava具体方法详解
查看>>
java注解-ElementType详解
查看>>
Android进阶系列-发布项目到Jcenter
查看>>
基于Zxing的二维码扫描解析库——ZxingPlus
查看>>