1.安装
npm i mongoos
2.使用
新建mongodb.js
文件
// mongodb.js
// 导入
const mongoose = require('mongoose');
// 连接
// mongodb:协议名称
// mongodb:ip地址
// mongodb:默认端口号
// mongodb:数据库名称
mongoose.connect('mongodb://127.0.0.1:27017/test')
// 设置回调
// 成功
mongoose.connection.once('open', () => {})
// 失败
mongoose.connection.on('error', () => {})
// 关闭
mongoose.connection.on('error', () => {})
// 运行:终端输入
node mongodb.js
3.关闭
mongoose.disconnect()
4.常见文档操作方法(写在成功回调中)
mongoose.connection.once('open', () => {
// 配置集合结构(Schema:约束属性以及属性值的类型)
let books = new mongoose.Schema({
name: {
type: String,
default: '西游',
required: true,
unique: true // 必须独一无二的索引(比如手机号)
},
price: Number,
author: String,
is_hot: Boolean,
tags: Array,
style: {
type: String,
enum: ['言情', '玄幻'] // 枚举,输入内容必须在给定的范围内
},
date: Date,
any: mongoose.Schema.Types.Mixed, // 任意类型
id: mongoose.Schema.Types.ObjectId // 必须是文档ID(外键)
})
// 创建集合模型对象 ,也就是可以集合内的文档进行增删改查 (集合名称,结构对象)
let booksModel = mongoose.model('book', books)
// 创建文档
booksModel.create({
name: '西游记',
style: '玄幻',
author: '吴承恩',
price: '20',
is_hot: true,
tags: ['神话', '名著'],
date: new Date(),
any: 232
}).then((data) => {
console.log(data);
}).catch((err) => {
console.log(err, 'err');
})
// 删除一条文档
booksModel.deleteOne({ _id: '650297a15ee0fb6fe263fac5' }).then(res => {
console.log(res)
})
// 批量删除文档
booksModel.deleteMany({ is_hot: true }).then(res => {
console.log(res)
})
// 更新单条文档,(条件,更新内容)
booksModel.updateOne({ name: '西游记' }, { price: 1 }).then(res => {
console.log(res, '更新成功')
})
// 批量更新文档
booksModel.updateMany({ name: '西游记' }, { price: 11 }).then(res => {
console.log(res, '更新成功')
})
// 读取单条文档(条件)
booksModel.findOne({ name: '西游记' }).then(res => {
console.log(res, '读取')
})
// 根据ID读取文档
booksModel.findById('6502a239e6606c73c4299354').then(res => {
console.log(res, '根据ID读取')
})
// 批量获取
// 条件判断($lt less-than 小于 )
// 条件判断($gt less-than 大于 )
// 条件判断($ne less-than 不等于 )
// 条件判断($lte less-than 小于或等于 )
// 条件判断($gte less-than 大于或等于 )
booksModel.find({ price: { $lt: 20 } }).then(res => {
console.log(res, '批量获取')
})
// 或
booksModel.find({ $or: [{ name: '西游记' }, { name: '西游记' }] }).then(res => {
console.log(res, '批量获取')
})
// 且
booksModel.find({ $and: [{ price: { $gt: 2 } }, { price: { $lt: 100 } }] }).then(res => {
console.log(res, '批量获取')
})
// 正则关键字搜索文档
booksModel.find({ name: new RegExp('西') }).then(res => {
console.log(res, '批量获取')
})
// 读取指定文档
booksModel.find().select({ name: 1, price: 1 }).then(res => {
console.log(res, '读取指定对象')
})
// 数据排序(sort:1 升序,-1降序),可以和find.select
booksModel.find().select({ name: 1, price: 1 }).sort({ price: 1 }).then(res => {
console.log(res, '读取指定对象')
})
// 通过截取来筛选文档,一般用于分页(skip:数据从那一条跳过 .limit:数据截取的数量)
booksModel.find().skip(1).limit(2).then(res => {
console.log(res, '读取指定对象')
})
})
5.封装
封装配置文件
创建:config.js
文件
// 配置文件
module.exports = {
host: '127.0.0.1', // ip地址
port: '27017', // 端口号
name: 'test', // 数据库名称
}
封装mongoose
创建:mongoose.js
文件
// 通过module.exports对外暴露方法 (成功,失败)
module.exports = function (success, error = null) {
// 导入mongoose
const mongoose = require('mongoose');
// 连接数据库
mongoose.connect(`mongodb://${host}:${port}/${name}`)
// 成功回调
mongoose.connection.once('open', () => {
success()
})
// 失败回调
mongoose.connection.on('error', () => {
error()
})
// 关闭回调
mongoose.connection.on('close', () => {
console.log('close')
})
}
封装管理文档
创建:document.js
文件
// 管理文档
// 引入mongoose
const mongoose = require('mongoose');
// 配置集合
let books = new mongoose.Schema({
name: {
type: String,
default: '西游',
required: true,
unique: true // 必须独一无二的索引(比如手机号)
},
price: Number,
author: String,
is_hot: Boolean,
tags: Array,
style: {
type: String,
enum: ['言情', '玄幻'] // 枚举,输入内容必须在给定的范围内
},
date: Date,
any: mongoose.Schema.Types.Mixed, // 任意类型
id: mongoose.Schema.Types.ObjectId // 必须是文档ID(外键)
})
// 创建文档
let document = mongoose.model('book', books)
// 暴露
module.exports = document
使用封装的mongoose和文档方法
创建:db.js
文件
const db = require('./mongoose') // 引入 mongoose.js
const document = require('./document'); // 引入 文档操作方法
// 调用函数:使文档操作方法运行在mongoose中,db(成功,失败)
db(() => {
// 测试读取文档
document.find().select({ name: 1, price: 1 }).then(res => {
console.log(res, '读取指定对象')
})
})
终端运行
node mongodb.js