mongodb的基本使用

41 阅读2分钟

基本使用

可以通过 JSON 文件来理解 Mongodb 中的概念

  • 一个JSON 文件 好比是一个数据库,一个 Mongodb 服务下可以有 N 个数据库
  • JSON 文件中的 一级属性的数组值 好比是** 集合**
  • 数组中的对象好比是 文档
  • 对象中的属性有时也称之为 字段

一般情况下

  • 一个项目使用一个数据库
  • 一个集合会存储同一种类型的数据

下载地址: www.mongodb.com/try/downloa…

命令行交互

数据库命令

1.显示所有的数据库 show dbs

2.切换到指定的数据库,如果数据库不存在会自动创建数据库 use 数据库名

3.显示当前所在的数据库 db

4.删除当前数据库 use 库名 -> db.dropDatabase()

集合命令

1.创建集合 db.createCollection('集合名称')

2.显示当前数据库中的所有集合 show collections

3.删除某个集合 db.集合名.drop()

4.重命名集合 db.集合名.renameCollection('newName')

文档命令

1.插入文档 db.集合名.insert(文档对象)

2.查询文档 db.集合名.find(查询条件)

_id 是 mongodb 自动生成的唯一编号,用来唯一标识文档

3.更新文档

db.集合名.update(查询条件,新的文档)

db.集合名.update({name: "张三"},{ $set: { age: 19 } })

4.删除文档

db.集合名.remove(查询条件)

mongoose

Mongoose 是一个对象文档模型库,官网 www.mongoosejs.net/

方便使用代码操作 mongodb 数据库

使用流程

//1. 安装 mongoose
//2. 导入 mongoose
const mongoose = require('mongoose');                        
//3. 连接数据库
mongoose.connect('mongodb://127.0.0.1:27017/bilibili');                        
//4. 设置连接回调
//连接成功
mongoose.connection.on('open', () => {                        
console.log('连接成功');
//5. 创建文档结构对象
let BookSchema = new mongoose.Schema({                        
    title: String,
    author: String,
    price: Number            
});                        
//6. 创建文档模型对象
let BookModel = mongoose.model('book', BookSchema);                        
//7. 插入文档
BookModel.create({                        
title: '西游记',author: '吴承恩',price: 19.9                        
  }, (err, data) => {
    if (err) throw err;
    //输出 data 对象
    console.log(data);
    //8. 断开连接
    mongoose.disconnect();                        
});});                        
//连接出错
mongoose.connection.on('error', () => {                        
console.log('连接出错~~');})                        
//连接关闭
mongoose.connection.on('close', () => {                        
console.log('连接关闭');})

字段类型

类型描述
String字符串
Number数字
Boolean布尔值
Array数组,也可以使用 [] 来标识
Date日期
BufferBuffer 对象
Mixed任意类型,需要使用 mongoose.Schema.Types.Mixed 指定
ObjectId对象ID,需要使用 mongoose.Schema.Types.ObjectId 指定
Decimal128高精度数字,需要使用 mongoose.Schema.Types.Decimal128 指定

字段验证

必填项
title : {
    type: String,
    required: true
}

默认值
author: {
    type: String,
    default: '默认值'
}

唯一值
username: {
    type: String,
    unique: true
}                                                                        
unique 需要 重建集合 才能有效果    

Mongoose 的 CURD

数据库的基本操作包括四个,增加(create),删除(delete),修改(update),查(read)

增加

插入一条

SongModel.create({
    title:'给我一首歌的时间',
    author: 'Jay'                        
}, function(err, data){
    //错误                        
    console.log(err);
    //插入后的数据对象
    console.log(data);                        
});    

批量插入

//1.引入mongoose
const mongoose = require('mongoose');        
//2.链接mongodb数据库 connect 连接
mongoose.connect('mongodb://127.0.0.1:27017/project'); 

// 3.设置连接的回调
mongoose.connection.on('open', () => {
    // 4.声明文档结构
    const PhoneSchema = new mongoose.Schema({
        brand: String,
        color: String,
        price: Number,
        tags: Array    
    })
    // 6.创建模型对象
    const PhoneSchema = mongoose.model('phone', PhoneSchema);
    PhoneSchema.insertMany([
        {                                                                                    
            brand:'华为',
            color:'灰色',
            price:2399,
            tags:['电量大','屏幕大','信号好']                                                         
        },
        {                                                                                    
            brand:'华为',
            color:'灰色',
            price:2399,
            tags:['电量大','屏幕大','信号好']                                                         
        }  
    ],(err, data) => {
        if(err) throw err;
        console.log("写入成功")
        mongoose.connection.close()    
    })
})

删除一条数据

SongModel.deleteOne(
    {_id:'5dd65f32be6401035cb5b1ed'}, function(err) {
    if(err) throw err;
    console.log('删除成功');
    mongoose.connection.close();                        
});                                                        

批量删除

SongModel.deleteMany({author:'Jay'}, function(err) {
    if(err) throw err;
    console.log('删除成功');
    mongoose.connection.close();                        
});                                                        

更新一条数据

SongModel.updateOne({author: 'JJ Lin'}, {author: '林俊杰'}, function (err) {
    if(err) throw err;
    mongoose.connection.close();                        
});                                                        

批量更新数据

SongModel.updateMany({author: 'Leehom Wang'}, {author: '王力宏'}, function (err) {
    if(err) throw err;
    mongoose.connection.close();
});                                                        

查询一条数据

SongModel.findOne({author: '王力宏'}, function(err, data) {
    if(err) throw err;
    console.log(data);
    mongoose.connection.close();                        
});                        
//根据 id 查询数据
SongModel.findById('5dd662b5381fc316b44ce167',function(err, data){                        
    if(err) throw err;
    console.log(data);
    mongoose.connection.close();                        
});                                                        

批量查询数据

    //不加条件查询
 SongModel.find(function(err, data){                        
    if(err) throw err;
    console.log(data);
    mongoose.connection.close();                        
});                        
//加条件查询
SongModel.find({author: '王力宏'}, function(err, data){                        
    if(err) throw err;
    console.log(data);
    mongoose.connection.close();                        
});

条件控制

运算符

在 mongodb 不能 > < >= <= !== 等运算符,需要使用替代符号

使用 $gt

  • < 使用 $lt

= 使用 $gte

  • <= 使用 $lte
  • !== 使用 $ne

db.students.find({id:{$gt:3}});  id号比3大的所有的记录

逻辑运算

**$or **逻辑或的情况

db.students.find({$or:[{age:18},{age:24}]});

**$and **逻辑与的情况

db.students.find({ and: [{age: {lt:20}}, {age: {$gt: 15}}]});

正则匹配

条件中可以直接使用 JS 的正则语法,通过正则可以进行模糊查询

db.students.find({name:/imissyou/});

个性化读取

字段筛选

//0:不要的字段
//1:要的字段
SongModel.find().select({_id:0,title:1}).exec(function(err,data){                        
    if(err) throw err;
    console.log(data);
    mongoose.connection.close();
});

数据排序

//sort 排序
//1:升序
//-1:倒序
SongModel.find().sort({hot:1}).exec(function(err,data){                        
    if(err) throw err;
    console.log(data);
    mongoose.connection.close();                        
});                                                        

数据截取

    //skip 跳过 limit 限定
 SongModel.find().skip(10).limit(10).exec(function(err,data){
    if(err) throw err;
    console.log(data);
    mongoose.connection.close();
});             

最后,欢迎访问我的博客:chu-yang.top:8018/>?id=34