zoukankan      html  css  js  c++  java
  • node 中使用 mongoDB

    # mongoose

    * 官网:http://mongoosejs.com/
    * 官方指南:[https://mongoosejs.com/docs/guide.html](https://mongoosejs.com/docs/guide.html)
    * 官方 API 文档:[https://mongoosejs.com/docs/api.html](https://mongoosejs.com/docs/api.html)

    ## mongoDB 数据库的基本概念

    * 可以有多个数据库
    * 一个数据库中可以有多个集合(表)
    * 文档结构很灵活,没有任何限制
    * MongoDB 非常灵活,不需要像 MySQL 一样先创建数据库、表、设计结构
    * 在这里只需要,当你需要插入数据的时候,只需要指定往哪个数据库的哪个集合操作就可以了
    * 一切都由 MongoDB 来帮你自动完成建库建表这件事儿

    ```json
    {
    qq: {
    users: [
    {name: '张三',age: 15},
    {name: '张三',age: 15},
    ],
    products: [],
    ...
    },
    taobao: {

    },
    baidu: {

    }
    }
    ```

    ## 起步

    安装:

    ```shell
    npm i mongoose
    ```

    hello world:

    ```shell
    const mongoose = require('mongoose');
    mongoose.connect('mongodb://localhost:27017/test', {useNewUrlParser: true});

    const Cat = mongoose.model('Cat', { name: String });

    const kitty = new Cat({ name: 'Zildjian' });
    kitty.save().then(() => console.log('meow'));
    ```

    ## 官方指南

    ### 设计 Schema 发布 Model

    ```javascript
    var mongoose = require('mongoose')
    var Schema = mongoose.Schema

    // 1. 连接 mongoDB 数据库
    // 指定连接的数据库不需要存在,当你插入第一条数据之后就会自动被创建出来
    mongoose.connect('mongodb://localhost/itcast');

    // 2. 设计集合(文档)结构(表结构)
    // 字段名称就是表结构中的属性名称
    // 值
    // 约束的目的是为了保证数据的完整性,不要有脏数据
    var userSchema = new Schema({
    username: {
    type: String,
    require: true //必须有
    },
    password: {
    type: String,
    require: true
    },
    email: {
    type: String
    }
    // title: String,
    // author: String,
    // body: String,
    // comments: [{ body: String, date: Date }],
    // date: { type: Date, default: Date.now },
    // hidden: Boolean,
    // meta: {
    // votes: Number,
    // favs: Number
    // }
    })

    // 3. 将文档结构发布为模型
    // mongoose.model 方法就是用来将一个架构发布为 model
    // 第一个参数: 传入一个大写名词单数字符串用来表示数据库名称
    // mongoose 会自动将大写名词的字符串生成 小写复数 的集合名称
    // 例如:这里的 User 最终会变成 users 集合名称
    // 第二个参数:架构 Schema
    // 返回值:模型构造函数
    var User = mongoose.model('User', userSchema)

    // 4. 当我们有了模型构造函数之后,就可以使用这个构造函数对 User 集合中的数据为所欲为啦(增删改查)
    ```

    ### 增加数据

    ```javascript
    var admin = new User({
    username: 'admin',
    password: '123456',
    email: 'admin@qq.com'
    })

    admin.save(function (err, ret) {
    if (err) {
    console.log('保存失败!')
    } else{
    console.log('保存成功!')
    console.log(ret)
    }
    })
    ```

    ### 查询

    查询所有:

    ```javascript
    User.find(function (err, ret) {
    if (err) {
    console.log('查询失败')
    } else {
    console.log(ret)
    }
    })
    ```

    按条件查询所有:

    ```javascript
    User.find({
    username: 'zs'
    }, function (err, ret) {
    if (err) {
    console.log('查询失败')
    } else {
    console.log(ret)
    }
    })
    ```

    按条件查询单个:

    ```javascript
    User.findOne({
    username: 'zs',
    password: '123456'
    }, function (err, ret) {
    if (err) {
    console.log('查询失败')
    } else {
    console.log(ret)
    }
    })
    ```

    ### 删除数据

    ```javascript
    User.remove({
    username: 'zs'
    },function (err, ret) {
    if (err) {
    console.log('删除失败')
    } else {
    console.log('删除成功')
    console.log(ret)
    }
    })
    ```

    根据条件删除一个:

    ```javascript
    Model.findOneAndRemove(conditions, [options], [callback])
    ```

    根据 id 删除一个:

    ```javascript
    Model.findByIdAndRemove(id, [options], [callback])
    ```

    ### 更新数据

    根据条件更新所有:

    ```javascript
    Model.update(conditions, doc, [options], [callback])
    ```

    根据制定条件更新一个:

    ```javascript
    Model.findOneAndUpdate([conditions], [update], [options], [callback])
    ```

    根据 id 更新一个:

    ```javascript
    User.findByIdAndUpdate('5d2bf14bee13200d08184150',{
    password: '8855443'
    },function (err, ret) {
    if (err) {
    console.log('更新失败')
    } else {
    console.log('更新成功')
    }
    })
    ```

  • 相关阅读:
    Swift学习——格式控制符和元组流程控制(二)
    boost::string 例题1
    钱币兑换问题
    我心目中的北京大学:从薛定格到王恩哥
    2.1-Java语言基础(keyword)
    【C语言天天练(十)】结构体
    JVM GC调优一则--增大Eden Space提高性能
    C++的一种业务分发方案(另类的工厂模式)
    Eclipse使用方法和技巧二十六:浅谈快捷键
    linux-shell脚本命令之grep
  • 原文地址:https://www.cnblogs.com/qjykn/p/11190582.html
Copyright © 2011-2022 走看看