最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • MongoDB增删改查操作

    正文概述 掘金(南宫燚滨)   2021-06-27   431

    1. 创建集合

    创建集合分为两步,一是对对集合设定规则,二是创建集合,创建mongoose.Schema构造函数的实例即可创建集合。

    // 设定集合规则
    const courseSchema = new mongoose.Schema({
        name: String,
        author: String,
        isPublished: Boolean
    });
    // 创建集合并应用规则
    const Course = mongoose.model('Course', courseSchema); // courses
    

    2. mongoose验证

    在创建集合规则时,可以设置当前字段的验证规则,验证失败就则输入插入失败。

    • required: true 必传字段
    • minlength:3 字符串最小长度
    • maxlength: 20 字符串最大长度
    • min: 2 数值最小为2
    • max: 100 数值最大为100
    • enum: ['html', 'css', 'javascript', 'node.js']
    • trim: true 去除字符串两边的空格
    • validate: 自定义验证器
    • default: 默认值

    获取错误信息:error.errors['字段名称'].message

    3. 创建文档

    创建文档实际上就是向集合中插入数据。

    分为两步:

    • ① 创建集合实例。
    • ② 调用实例对象下的save方法将数据保存到数据库中。
    // 创建集合实例
    const course = new Course({
        name: 'Node.js course',
        author: '黑马讲师',
        tags: ['node', 'backend'],
        isPublished: true
    });
    // 将数据保存到数据库中
    course.save();
    
    Course.create({name: 'JavaScript基础', author: '黑马讲师', isPublish: true}, (err, doc) => {
        // 错误对象
        console.log(err)
        // 当前插入的文档
        console.log(doc)
    });
    
    Course.create({name: 'JavaScript基础', author: '黑马讲师', isPublish: true})
        .then(doc => console.log(doc))
        .catch(err => console.log(err))
    

    4. mongoDB数据库导入数据

    mongoimport –d 数据库名称 –c 集合名称 –file 要导入的数据文件

    找到mongodb数据库的安装目录,将安装目录下的bin目录放置在环境变量中。

    5. 查询文档

    //  根据条件查找文档(条件为空则查找所有文档)
    Course.find().then(result => console.log(result))
    // 返回文档集合
    [{
        _id: 5c0917ed37ec9b03c07cf95f,
        name: 'node.js基础',
        author: '黑马讲师‘
    },{
        _id: 5c09dea28acfb814980ff827,
        name: 'Javascript',
        author: '黑马讲师‘
    }]
    
    //  根据条件查找文档
    Course.findOne({name: 'node.js基础'}).then(result => console.log(result))
    // 返回文档
    {
        _id: 5c0917ed37ec9b03c07cf95f,
        name: 'node.js基础',
        author: '黑马讲师‘
    }
    
    //  匹配大于 小于
    User.find({age: {$gt: 20, $lt: 50}}).then(result => console.log(result))
    
    //  匹配包含
    User.find({hobbies: {$in: ['敲代码']}}).then(result => console.log(result))
    
    //  选择要查询的字段
    User.find().select('name email').then(result => console.log(result))
    
    // 将数据按照年龄进行排序
    User.find().sort('age').then(result => console.log(result))
    
    //  skip 跳过多少条数据 limit 限制查询数量
    User.find().skip(2).limit(2).then(result => console.log(result))
    

    6. 删除文档

    // 删除单个
    Course.findOneAndDelete({}).then(result => console.log(result))
    
    // 删除多个
    User.deleteMany({}).then(result => console.log(result))
    
    

    7. 更新文档

    // 更新单个
    User.updateOne({查询条件}, {要修改的值}).then(result => console.log(result))
    // 更新多个
    User.updateMany({查询条件}, {要更改的值}).then(result => console.log(result))
    

    8. 集合关联

    通常不同集合的数据之间是有关系的,例如文章信息和用户信息存储在不同集合中,但文章是某个用户发表的 ,要查询文章的所有信息包括发表用户,就需要用到集合关联。

    • 使用id对集合进行关联
    • 使用populate方法进行关联集合查询

    MongoDB增删改查操作

    8.1. 集合关联实现

    // 用户集合
    const User = mongoose.model('User', new mongoose.Schema({ name: { type: String } }));
    // 文章集合
    const Post = mongoose.model('Post', new mongoose.Schema({
        title: { type: String },
        // 使用ID将文章集合和作者集合进行关联
        author: { type: mongoose.Schema.Types.ObjectId, ref: 'User' } 
    }));
    //联合查询
    Post.find()
        .populate('author')
        .then((err, result) => console.log(result));
    

    起源地下载网 » MongoDB增删改查操作

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元