mongodb根据表名查询_MongoDB笔记

本文是一篇MongoDB的入门教程,涵盖了从安装到操作的全过程,包括数据库服务的启动与停止、基本命令、通过Node.js操作MongoDB以及使用mongoose设计数据库。文章详细介绍了MongoDB的数据结构、插入、查询、删除和修改数据的操作,还有如何进行模块化设计,最后提到了可视化软件和综合练习。
摘要由CSDN通过智能技术生成
mongoDB非常灵活,让我们脱离SQL语句来操作数据库
它是动态的数据库,不需要提前设定表结构,只需要执行代码像操作对象一样操作数据即可
建库等过程是自动实现的
MongoDB 教程 | 菜鸟教程​www.runoob.com
fb3cd44f9e1b94c546da432a5b30bf4c.png

一. 关系型数据库和非关系型数据库

  • 表就是关系,表与表之间存在关系
  • 所有关系型数据库都需要设计表结构
  • 关系型数据库支持约束 如 唯一 主键 默认值 非空 等等
  • 非关系型数据库非常灵活
  • 好多非关系型数据库就是键值对
  • 但是MongoDB是长得最像关系型的非关系型
  • 对MongoDB来说: 数据库 --> 数据库
  • 数据表 --> 集合(可以想象成一个数组)
  • 表记录 --> 文档对象(可以想象成数组存入的对象)
  • MongoDB无需设计表结构
  • 也就是说: 可以任意存入数据,没有结构这一说

mongodb数据库服务就像一个大对象,里面是一个个的数据库,每个数据库中都有几个集合(列表),每个集合(列表)中都是一对对的键值对数据对象

2b7cd0dfad86edaf98fe7c906cdaacbc.png

二.安装

Download Center: Community Server​www.mongodb.com
39c803244fe37e63c1eac97d65b44b1c.png

下载安装,然后配置环境变量

e3ef65ab2ffde7cc1b41898d81df8cc4.png

然后打开cmd确认一下,输入 mongod --version

159371d31c5bba7400091c64b815b504.png

三. 启动和停止数据库服务

1.启动数据库服务

在启动之间先新建一个文件夹 C:datadb,

然后控制台输入:

mongod

5c18217b30a251970a4fca0c3bc1c053.png

2.关闭数据库服务

1.开启服务的控制台,直接ctrl+c即可停止
2.直接关闭控制台

3.连接数据库

在新的CMD中

mongo   //默认连接本机数据库

22ca0d95a83499356c35a65dab3fafa9.png

4.断开数据库连接

exit

216d11cdc4ac646162c24710210f1192.png

四. 基本命令

  1. 显示数据库列表
show dbs   //显示所有数据库

2. 查看当前连接的数据库

db

bdd82be2e2fe7a20f9b44c1cc21ac702.png

3. 创建新数据库/使用数据库

use 数据库名   //这条命令会切换到某数据库,如果这个数据库不存在,会新建(有数据的瞬间新建)

4. 插入数据

不需要建表,直接写数据 (其实,系统会根据您的命令创建集合,并往集合里写入数据)

db.students.insertOne({"name":"Tom"})

e7d6546a28485bd21f2103957fd9435a.png

5. 显示集合

show collections

89178caab86519faaef3b5e8858ee754.png

6. 查询集合中的所有数据

db.students.find()

3767951b9be142d66ac21b5c7f855ef5.png

7.增删改查

增:见第七节

查:见第八节

删:见第九节

改:见第十节

五.如何通过node-js操作mongo-db

1.使用官方包mongodb操作(原生的,不推荐使用)

$ npm install mongodb --save

2.使用第三方mongoose来操作

mongoose是基于上述官方包的二次封装.

mongodb是动态的,非常灵活,只需要在 代码中设计数据库,mongoose可以让你的设计编写变得非常简单

Mongoose.js中文网​www.mongoosejs.net

安装:

cnpm i mongoose --save

使用:

const mongoose = require('mongoose');
//引包
mongoose.connect('mongodb://localhost/test');
//连接数据库

//创建一个模型(设计数据库) 
const Cat = mongoose.model('Cat', { name: String });
//表名是cats(里面都是Cat,所以表名是cats) (*^_^*)
//要求里面有一个属性name,类型为字符串

//实例化一个数据
const kitty = new Cat({ name: 'Zildjian' });
//实例了一个小猫kitty,它的名字是Zildjian

//持久化保存这个示例
kitty.save().then(() => console.log('meow')); 

a4e3af9d0010b2d825050b490631a046.png
最后一行的猫叫,代表存储成功

接下来解决上面的两个提醒,

看了看是方法将被弃用,应该使用新方法,如果使用新方法,在构建连接时要传入对应的参数,

那就传吧

mongoose.connect('mongodb://localhost/test',{useNewUrlParser:true,useUnifiedTopology:true},(err)=>{
    if(err) return console.log('connection ERR:'+err);
    return console.log('connection success');
});

9d0ab08de1b4af0badc7129b15c329e4.png
解决了

简单查询一下:

1ca14382ef445163ad4769ee7340e3a0.png

六 如何使用mongoose来设计数据库

1.引包

const mongoose = require('mongoose');

2.连接数据库(没有会新建)

mongoose.connect('mongodb://localhost/db2',{useNewUrlParser:true,useUnifiedTopology:true},
(err)=>{
    if(err) return console.log('connection ERR:'+err);
    return console.log('connection success');
});

3.设计表结构

①.先拿到mongoose的架构模型

var Schema = mongoose.Schema

②.在实例化一个数据模型

var studentSchema = new Schema({
    name: String,
    age: Number,
    gender: Number,
    school: String,
    hidden: Boolean,
    reward: [{ rewardName: String, date: { type: Date, default: Date.now } }],
})

但是,这样设计约束太少了!!!让我们来看约束版本:

    name: {
        type: String,
        required: true,
    },

③ 将文档结构发布为模型

var Student=mongoose.model('student',studentSchema)//模型,不是模块.这里要注意单词model

将一个架构发布为一个模型,第一个参数传入一个大写单数字符串,最终mongoose会自动生成一个小写复数的集合(数据表). 可以认为是创建了一个可以持久化存储的类对象.

④ 有了这个类对象之后,我们就可以对数据为所欲为了~

4.模块化设计

我们创建一个model/user.js文件,专门来做数据库模型

const mongoose = require('mongoose');

var Schema = mongoose.Schema
var userSchema = new Schema({
    email: { type: String, required: true },
    nickname: { type: String, required: true },
    password: { type: String, required: true },
    created_time: { type: Date, default: Date.now },
                        //这里不要直接写 Date.now() 如果写了,模块执行时就会写死
    last_modified_time: { type: Date, default: Date.now },
    avatar: { type: String, default: '/public/img/avatar-default.png' },
    bio: { type: String, default: '' },
    gender: { type: Number, enum: [0, 1, -1], default: -1 },
    birthday: { type: Date },
    status: {
        type: Number, enum: [0,//正常用户
            1,//不可评论
            2,//不可登录
        ]
    },
})

module.exports = mongoose.model('User', userSchema)

在app.js中连接数据库

const mongoose = require('mongoose');

//mongoDB
mongoose.connect('mongodb://localhost/db3',{useNewUrlParser:true,useUnifiedTopology:true},(err)=>{
    if(err) return console.log('connection ERR:'+err);
    return console.log('connection success');
});

如果哪个地方想用它

var User=require('./models/user')

七 新增数据操作

1.创建一条数据 (实例化一个模型对象)

var stu1=Student({
    name:'oliver',
    age:18,
    gender:1,
    school:'湘北中学',
    hidden:false
})

2. 存储数据

stu1.save((err,ret)=>{
    if(err) return console.log('存储失败'+err);
    return console.log('存储成功'+ret)
})

2a94d74c8328efd241811e52fea0295c.png

八 查询数据

1.查询所有

Student.find((err,ret)=>{
    if(err) return console.log(err);
    return console.log(ret);    
})

07e07b54643adaf1e606a7bafcc2dc23.png

2.按条件查询

把条件封装成一个对象放在第一个参数即可

Student.find({name:"anny"},(err,ret)=>{
    if(err) return console.log(err);
    return console.log(ret);    
})

3.只找匹配的第一个

Student.findOne({name:"anny"},(err,ret)=>{
    if(err) return console.log(err);
    return console.log(ret);    
})

4.按ID查询

Student.findById('5e48ceb5047cfa2bcc970228',(err,ret)=>{
    if(err) return console.log(err);
    return console.log(ret);    
})

5.多个条件查询

User.find({
        $or: [
            { email: req.body.email },
            { nickname: req.body.nickname }
        ]
    }, (err, data) => {})

九 删除数据

1.按条件删除

Student.deleteMany({name:'anny'},(err,ret)=>{
    if(err) return console.log(err);
    return console.log(ret);    
})

6ede5d04dbc4bb852ae319b45475847f.png

2.按条件删除一个

Student.deleteOne({name:'anny'},(err,ret)=>{
    if(err) return console.log(err);
    return console.log(ret);    
})

还有一种方法

Student.findOneAndDelete({name:'anny'},(err,ret)=>{
    if (err) return console.log('失败'+err);
    return console.log('成功');
})

3.按ID查询然后删除

Student.findByIdAndDelete("5e48c7118967a217d09e7838", (err, ret) => {
    if (err) return console.log('失败'+err);
    return console.log('成功');
})

还有一种

Student.findByIdAndRemove("5e48ce979b24812260a0217d", (err, ret) => {
    if (err) return console.log('失败'+err);
    return console.log('成功');
})

十 修改数据

1.按ID查询然后修改

Student.findByIdAndUpdate('5e48c7118967a217d09e7838',{age:8},(err,ret)=>{
    if (err) return console.log('更新失败'+err);
    return console.log('更新成功');    
})

2.按条件查找然后修改

Student.updateMany({name:'anny'},{age:6},(err,ret)=>{
    if (err) return console.log('更新失败'+err);
    return console.log('更新成功');    
})

3.按条件查找一个然后修改

Student.updateOne({name:'anny'},{age:10},(err,ret)=>{
    if (err) return console.log('更新失败'+err);
    return console.log('更新成功');    
})

还有一种

Student.findOneAndUpdate({name:'anny'},{age:8},(err,ret)=>{
    if (err) return console.log('更新失败'+err);
    return console.log('更新成功');    
})

十一.可视化软件

The Smartest GUI Admin Tool for MongoDB​nosqlbooster.com Navicat for MongoDB | MongoDB 数据库管理和开发工具​www.navicat.com.cn
1b342de20ff498035d5aa92a611a604a.png

十二.综合练习

我们将之前写的学生管理系统改为mongodb数据库

之前的版本:

https://github.com/zfdok/node_stu_mgr​github.com

需要的知识:

熊爸天下:node-js备忘(二)​zhuanlan.zhihu.com

修改后的版本:

https://github.com/zfdok/node_stu_mongoDB​github.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值