• node开发MongoDB


    MongoDB

    mongoDB中文文档

    数据库简介

    数据库:持久化存储数据的仓库

    分类:

    关系型数据库:mysql、oracle、sql server、db2
    非关系型数据库:mongodb、redis

    MongoDB简介

    文档数据库,类似json结构,存储各种JSON(BSON)。mongodb版本号,偶数稳定版,奇数开发版。

    下载安装(默认端口27017)

    下载: `mongodb下载地址
    安装:双击安装包,配置环境变量。
    验证:mongod [–dbpath 路径] [–port 端口号]

    MongoDB设置系统服务

    mongodb安装目录创建mongodb.cfg文件

        systemLog:
            destination: file
            path: c:\data\log\mongod.log
        storage:
            dbPath: c:\data\db
    
    • 1
    • 2
    • 3
    • 4
    • 5

    管理员模式打开控制台参考文档

      // 安装服务
      sc.exe create MongoDB binPath= "\"mongo bin路径\mongod.exe\" --service --config=\"mongo路径\mongod.cfg\"" DisplayName= "MongoDB" start= "auto"
      // 卸载服务
      sc delete MongoDB
    
    • 1
    • 2
    • 3
    • 4

    MongoDB基本操作

    MongoDB的bash命令

    启动服务端:mongod
    启动客户端:mongo
    三个概念

    数据库(database):存放集合
    集合(collection):类似数组存放文档
    文档(document):数据库最小单位,存储操作内容都是文档
    n个文档组成集合,n个集合组成数据库

    bash操作命令

    show dbs、collections // 显示所有数据库、集合
    use 数据库名 // 进入指定数据库
    db // 显示当前数据库

    MongoDB图形化工具

    图形化工具:

    NoSQL Manager for MongoDB Freeware 下载地址
    Studio 3T 下载地址

    插入、查询、修改、删除文档

    插入

    db.collection.insert() // 插入1或n个文档,若未指定id则自动生成
    db.collection.insertOne({}) // 插入1个文档
    db.collection.insertMany([{},{}]) // 插入n个文档

    查询

    ObjectId() // 查看生成id
    db.collection.find({}) // 查询所有文档(支持n条件查询)
    db.collection.findOne() // 查询1个文档
    db.collection.count() // 查询文档数量

    修改

    db.collection.update(查询条件,新对象,{multi:true}) // 新对象替换旧对象&默认修改1个

    db.collection.update({},{KaTeX parse error: Expected '}', got 'EOF' at end of input: set:{key1:KaTeX parse error: Expected 'EOF', got '}' at position 5: val1}̲}) // 修改符合条件指定属…unset:{ k e y 1 : key1: key1:val1}}) // 删除符合条件指定属性

    db.collection.updateOne() // 修改符合1个
    db.collection.updateMany() // 修改符合n个

    删除(逻辑删除可代替真删除)

    db.collection.remove() // 删除1个或n个,第二个参数为true标识删除1个
    db.collection.deleteOne() // 删除1个
    db.collection.deleteMany() // 删除多个
    db.collection.drop() // 删除集合
    db.dropDatabase() // 删除数据库

    sort和投影

    sort用法

    db.collection.find() // 文档显示默认id升序
    db.collection.find().sort({$key:-1}) // $key降序显示(1升序,-1降序)

    投影用法(显示或隐藏指定字段)

    db.collection.find({},{$key:1}) // find第2个参数(1显示,2隐藏)

    文档间关系(内嵌映射)

    文档间关系(1对1,,1对n,n对n)

    1对1(丈夫与妻子)

    db.collection.insert({name:“丈夫”,husband:{“妻子”}})

    1对n(用户与订单)

    db.collection.insert({orders:[订单1,订单2,…],user_id:ObjectId(“59c47e35241d8d36a1d50de0”)})

    n对n(分类与商品)

    db.collection.insert({goods:[商品1,商品2,…],category_id:“分类1”})
    db.collection.insert({goods:[商品2,商品3,…],category_id:“分类2”})

    补充

    添加

    db.col1.insert({}) // 插入文档

    修改

    db.col1.update({ k e y : key: key:val},KaTeX parse error: Expected '}', got 'EOF' at end of input: set:{newKey: n e w V a l , newVal, newVal,newKey:[ n e w V a l 1 , newVal1, newVal1,newVal2]}) // 添加属性(支持多级嵌套)
    db.col1.update({ k e y : key: key:val},{KaTeX parse error: Expected '}', got 'EOF' at end of input: unset:{oldKey:KaTeX parse error: Expected 'EOF', got '}' at position 7: oldVal}̲}) // 删除指定属性 …key:KaTeX parse error: Expected 'EOF', got '}' at position 4: val}̲,{push:{ o l d K e y : oldKey: oldKey:oldVal}}) // 追加文档属性$push$addToSet
    db.col1.replaceOne({ k e y : key: key:val},{ n e w K e y : newKey: newKey:newVal}) // 替换文档
    自增减(KaTeX parse error: Expected '}', got 'EOF' at end of input: …ol1.update({},{inc:{ k e y : key: key:val}});

    查询

    导入json文件到mongoDB数据库 // 文件导入数据
    use db1 // 进入数据库
    db.col1.find({}).count() // 集合查询文档数量
    db.col1.find({ k e y : key: key:val); // 集合查询文档(支持n条件,支持内嵌)

    运算符( g t , gt, gt,gte、 l t , lt, lt,lte、 e q , eq, eq,ne):db.col1.find({KaTeX parse error: Expected '}', got 'EOF' at end of input: key1:{gte:KaTeX parse error: Expected 'EOF', got '}' at position 5: val1}̲,key2:{ g t : gt: gt:val1, l t : lt: lt:val2}}});
    var接受查询变量 var id = db.col1.find({})[0]._id;
    分页(skip,limit):db.col1.find({}).skip(n).limit(n);
    多条件:db.col1.find({ k e y 1 : key1: key1:val1, k e y 2 : key2: key2:val2});
    条件内嵌:db.col1.find({‘ k e y 1. key1. key1.key2’:$val12});

    删除

    db.col1.remove({}) | drop() // 删除指定文件,清空集合

    mongoose简介

    1. Mongoose是通过node操作MongoDB的模块,对象文档模型(ODM)库,对原生MongoDB进行优化封装
    2. 可以为文档创建模型结构(Schema),对模型中对象/文档进行验证

    mongoose提供api对象

    Schema(模式对象):约束数据库的文档结构
    Model:所有文档标识,类似集合
    Document:集合中具体文档

    通过mongoose连接mongoDB

    npm i mongoose // 安装
    const mongoose = require(‘mongoose’); // 加载
    mongoose.connection(“mongodb://host/database”,{useMongoClient: true})// 连接数据库
    mongoose.connection.once(“open”,callback) // 连接数据库
    mongoose.connect.once(“close”,callback) // 断开连接
    mongoose.disconnect() // 断开链接

    Schema和Model

    Schema

    支持类型:String,Number,Boolean,Array,Buffer,Date,ObjectId,Oid,Mixed

        var Schame = mongose.Schame;  // 创建Schame  
        var objSchame = new Schame({
            key: Type,
            key: {
                type: Type,
                default: defaultVal
            },
            ...
        });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    Model

    Model表示集合,对数据库中数据进行操作

        var ObjModel = mongose.model(modelName,objSchame); // 创建Model  
        ObjModel.create({/*...*/},function(err){/*...*/})
    
        // 1.查询 条件,投影({name:1,_id:0} 或 "name -_id"),选项{skip:0,limit:0},回调
        // ObjModel.find(condition,[projection],[options],[callback]);
        // ObjModel.findById(condition,[projection],[options],[callback]);
        // ObjModel.findOne(condition,[projection],[options],[callback]);
        ObjModel.find({/*条件*/},{name:1,_id:0},{skip:0,limit:0},function(err,docs){/*代码逻辑*/})
        ObjModel.count({/*条件*/},function(err,docs){/*代码逻辑*/})
    
        // 2.创建 doc(s),回调
        ObjModel.create([{...},{...}],function(err){/*代码逻辑*/})
    
        // 3.修改 条件,修改后对象,配置参数,回调
        // ObjModel.update(condition,doc,[options],[callback])
        // ObjModel.updateOne(condition,doc,[options],[callback])
        // ObjModel.updateMany(condition,doc,[options],[callback])
        // ObjModel.replaceOne(condition,doc,[options],[callback])
        ObjModel.updateOne({'name':'value'},{$set:{'name':'value'}},function(err,docs){/*代码逻辑*/})
    
        // 4.删除
        // ObjModel.remove(conditions,[callback]);
        // ObjModel.deleteOne(conditions,[callback]);
        // ObjModel.deleteMany(conditions,[callback]);
        ObjModel.remove({'name':'value'},function(err,docs){/*代码逻辑&doc支持上述增删改查*/})
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    Document的方法

        // 创建Scheme
        // 创建Model
        // 创建Model实例即文档
        var ObjModel = new objModel({name:'tq'});
        ObjModel.save(function(err){/*代码逻辑*/});
        objModel.get('name'); // 获取指定属性值
        objModel.set('skill','skill'); // 设置属性值
        objModel.id; // 获取_id
        objModel.toJSON() // 转换json对象
        // objModel.toObject(); // 装好object对象
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    mongoose的模块化

    扩展

    定义tools文件夹

    创建conn_mongo.js文件,连接数据库

    创建models文件夹

    创建模型对象student.js,创建Schema,创建模型,exports(module.exports)导出

    MongoDB语法

    查询

    db.collection.find([query],[projection]).pretty() | [count()、limit()、skip()、sort({})]
    collection:集合
    query:可选,查询条件
    projection:可选,投影操作符
    pretty:格式化显示文档
    count:个数
    limit:显示行数
    skip:跳过几行
    sort:顺序(1:正序,-1:倒序)

    条件查询语句

    等于:{:}
    小于:{:{KaTeX parse error: Expected 'EOF', got '}' at position 4: lt:}̲} 小于等于:{:{lte:}}
    大于:{:{:KaTeX parse error: Expected 'EOF', got '}' at position 4: gt:}̲} 大于等于:{:{:gte:}}
    不等于:{:{:$ne:}}

    AND条件

    db.collection.find({key1:value1, k e y 2 : key2: key2:value2}).pretty();

    OR条件

    db.collection.find({KaTeX parse error: Expected '}', got 'EOF' at end of input: or:[{key1:KaTeX parse error: Expected 'EOF', got '}' at position 7: value1}̲,{key2:$value2}]}).pretty();

    AND和OR联合使用

    db.connection.find({ k e y 1 : key1: key1:value2},KaTeX parse error: Expected '}', got 'EOF' at end of input: or:[{key2:{KaTeX parse error: Expected 'EOF', got '}' at position 8: gt:"11"}̲},{key2:{$lt:“20”}}],{_id:0});

    排序

    db.collection().find().sort({})

    不显示id

    db.collection.find(条件,{_id:0})

  • 相关阅读:
    封装、继承、多态的概念和其中的区别
    scala/java redis的cluster模式 删除固定前缀的key
    网络原理之TCP_IP_1
    Redis未授权访问漏洞复现(三种方式)
    汽车厂商查询易语言代码
    java数组基础
    Java 8之后的那些新特性(二):文本块 Text Blocks
    【BOOST C++】教程2:最简程序段(Hello World)
    Superset
    docker进入容器报:Error response from daemon Container is not running
  • 原文地址:https://blog.csdn.net/qq_39683070/article/details/128201006