Mongodb的基本使用

Mongodb客户端下载:https://www.mongodb.com/try/download/community?tck=docs_server

MongoDBCompass可视化面板下载:MongoDB Compass Download | MongoDB

启动命令 net start mongodb

停止命令 net stop mongodb

Node与MongoDB的结合使用

1.Node下载mongodb第三方模块mongoose

npm install mongoose

2.导入模块

const mongoose = require('mongoose')

3.连接数据库(类似于mysql创建数据库并且连接)

//mongodb中不需要直接创建数据库的步骤,若使用的数据库不存在,会自动创建

mongoose.connect('mongodb://localhost/playground', { useNewUrlParser: true }, { useUnifiedTopology: true })

.then((result) => { console.log(result) })

.catch((err) => { console.log(err, "数据库连接失败") })

4.创建集合(类似于mysql数据库创建表)

//创建集合规则(类似于mysql数据库创建表时定义字段及其类型)
const courseSchema = new mongoose.Schema({

        name: String,
        author: String,
        isPublished: Boolean,

    })


//使用规则创建集合,创建时集合(表)字段首字母要大写,但是数据库实际创建时是小写且在最后加s
const Course = mongoose.model('Course', courseSchema)

5.创建文档(类似于mysql插入数据)

方式一

//创建文档(插入数据)

//实例化构造函数,这里的Course对象是上面创造的集合对象
const course = new Course({

    name: 'Miss',
    author: 'mi',
    isPublished: true,

})
//创建文档,当没有文档时,MongoDB默认是不会出现定义的数据库的
course.save();

方式二



Course.create({ name: 'Mis', author: 'mi', isPublished: true }, (err, doc) => {


    console.log(err)

    console.log(doc)

})

//证明会返回promise对象

Course.create({ name: 'Mis', author: 'mi', isPublished: true })
    .then(result => console.log(result))
    .catch(err => console.log(err))

6.导入文档(导入表且包含数据)

mongoimport -d playground -c users --file ./user.json

7.查询文档

const mongoose = require('mongoose')


mongoose.connect('mongodb://localhost/playground', { useNewUrlParser: true }, { useUnifiedTopology: true })

.then((result) => { console.log(result) })

.catch((err) => { console.log(err, "数据库连接失败") })


//创建集合

//创建集合规则(类似于mysql数据库创建表时定义字段及其类型)
const userSchema = new mongoose.Schema({

    name: String,
    age: Number,
    email: String,
    password: String,
    hobbies: [String]
})


//使用规则创建集合,创建时集合(表)字段首字母要大写,但是数据库实际创建时是小写且在最后加s
const User = mongoose.model('User', userSchema)
    //查询全部文档数据

//find方法返回数组集合,findOne方法返回对象

//查找全部内容
// User.find().then(result => { console.log(result) }).catch(err => { console.log(err) })


// User.find({ _id: '5c09f2b6aeb04b22f846096a' }).then(result => { console.log(result) }) .catch(err => { console.log(err) })

// User.findOne({ _id: '5c09f2b6aeb04b22f846096a' }).then(result => { console.log(result) }).catch(err => { console.log(err) })

//查询指定范围内容
// User.find({ age: { $gt: 20, $lt: 40 } }).then(result => { console.log(result) }).catch(err => { console.log(err) })

//查询指定包含内容
// User.find({ hobbies: { $in: ['敲代码'] } }).then(result => { console.log(result) }).catch(err => { console.log(err) })

//查询指定字段
// User.find().select('name email').then(result => { console.log(result) }).catch(err => { console.log(err) })

//字段排序

//升序
// User.find().sort('age').then(result => { console.log(result) }).catch(err => { console.log(err) })

//降序
// User.find().sort('-age').then(result => { console.log(result) }).catch(err => { console.log(err) })

//跳过某些数据,限制多少条数据

User.find().skip(2).limit(3).then(result => { console.log(result) }).catch(err => { console.log(err) })

8.删除文档

//查找文档并且删除,如果查询到多条数据,删除匹配到的第一个
// User.findOneAndDelete({ _id: '5c09f2b6aeb04b22f846096a' }).then(result => { console.log(result) }).catch(err => { console.log(err) })
//删除多条文档,空对象全部删除
//User.deleteMany({}).then(result => { console.log(result) }).catch(err => { console.log(err) })

9.更新文档


//更新单个文档
// User.updateOne({ name: '李四' }, { name: 'lisi' }).then(result => { console.log(result) }).catch(err => { console.log(err) })
//更新多个文档
//User.updateMany({}, { age: 89 }).then(result => { console.log(result) }).catch(err => { console.log(err) })

10.mongoose验证

const mongoose = require('mongoose')


mongoose.connect('mongodb://localhost/playground', { useNewUrlParser: true }, { useUnifiedTopology: true })

.then((result) => { console.log(result) })

.catch((err) => { console.log(err, "数据库连接失败") })


//创建集合

//创建集合规则(类似于mysql数据库创建表时定义字段及其类型)
const postSchema = new mongoose.Schema({

    title: {
        type: String,
        // required: true
        required: [true, '请输入标题'],

        minlength: 2,
        maxlength: 6,
        trim: true // 去除空格

    },

    age: {
        type: Number,
        // required: true
        min: 2,
        max: 6,
    },

    date: {
        type: Date,

        default: Date.now,
    },

    //规定可传递的值
    category: {
        type: String,
        // required: true
        enum: ['html', 'css'],
    },
    //自定义验证
    author: {
        type: String,
        // required: true
        validate: {

            validator: v => {
                return v && v.length > 4
            },

            message: '不符合要求'
        },
    }
})


//使用规则创建集合,创建时集合(表)字段首字母要大写,但是数据库实际创建时是小写且在最后加s
const post = mongoose.model('Post', postSchema)

// //创建文档(插入数据)

post.create({ title: 'aaa', author: 'aaaaa' }, (err, doc) => {


    console.log(err)

    console.log(doc)

})

11.获取错误验证信息

const mongoose = require('mongoose')


mongoose.connect('mongodb://localhost/playground', { useNewUrlParser: true }, { useUnifiedTopology: true })

.then((result) => { console.log(result) })

.catch((err) => { console.log(err, "数据库连接失败") })


//创建集合

//创建集合规则(类似于mysql数据库创建表时定义字段及其类型)
const postSchema = new mongoose.Schema({

    title: {
        type: String,
        // required: true
        required: [true, '请输入标题'],

        minlength: 2,
        maxlength: 6,
        trim: true // 去除空格

    },

    age: {
        type: Number,
        // required: true
        min: 2,
        max: 6,
    },

    date: {
        type: Date,

        default: Date.now,
    },

    //规定可传递的值
    category: {
        type: String,
        // required: true
        enum: ['html', 'css'],
    },
    //自定义验证
    author: {
        type: String,
        // required: true
        validate: {

            validator: v => {
                return v && v.length > 4
            },

            message: '不符合要求'
        },
    }
})


//使用规则创建集合,创建时集合(表)字段首字母要大写,但是数据库实际创建时是小写且在最后加s
const post = mongoose.model('Post', postSchema)

// //创建文档(插入数据)

post.create({ title: 'aaa', age: 1, category: java, author: 'aa' }).then(result => { console.log(result) }).catch(error => {

    const err = error.errors

    for (var attr in err) {


        console.log(err[attr]['message'])

    }

})

12.集合关联

const mongoose = require('mongoose')


mongoose.connect('mongodb://localhost/playground', { useNewUrlParser: true }, { useUnifiedTopology: true })

.then((result) => { console.log(result) })

.catch((err) => { console.log(err, "数据库连接失败") })


//创建集合

const userSchema = new mongoose.Schema({

    name: String,
    age: Number,
    email: String,
    password: String,
    hobbies: [String]
})


//使用规则创建集合,创建时集合(表)字段首字母要大写,但是数据库实际创建时是小写且在最后加s
const User = mongoose.model('User', userSchema)


//创建集合规则(类似于mysql数据库创建表时定义字段及其类型)
const postSchema = new mongoose.Schema({

    title: {
        type: String,
        // required: true
        required: [true, '请输入标题'],

        minlength: 2,
        maxlength: 6,
        trim: true // 去除空格

    },

    age: {
        type: Number,
        // required: true
        min: 2,
        max: 6,
    },

    date: {
        type: Date,

        default: Date.now,
    },

    //规定可传递的值
    category: {
        type: String,
        // required: true
        enum: ['html', 'css'],
    },
    //自定义验证
    author: {
        type: mongoose.Schema.Types.ObjectId,

        ref: 'User',
        // required: true

    }
})


//使用规则创建集合,创建时集合(表)字段首字母要大写,但是数据库实际创建时是小写且在最后加s
const post = mongoose.model('Post', postSchema)

// //创建文档(插入数据)


// User.create({ name: 'aaaaa', age: 1, }).then(result => { console.log(result) }).catch(error => {

//     console.log(error)
// })


post.create({ title: 'aaa', age: 3, author: '62f70e4a15ad82b69f08f622' }).then(result => { console.log(result) }).catch(error => {

    const err = error.errors

    for (var attr in err) {


        console.log(err[attr]['message'])

    }

})


post.find().populate('author').then(result => { console.log(result) })

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值