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) })