mongodb的结构主要是 一个collection 是一张表,一个document就是一条数据(我也不是很清楚)
一个db(数据库) 是一个或多个collection的集合
mongod 开启数据库服务器
mongo 链接数据库服务器
新建一个collection 或切换数据库
`use juejin("数据库名称")
show dbs 查看所有数据库`
db.dropDatabase() 删除数据库
``
db.collection.drop() 删除集合 db.collection.rename()
增 db.users("集合名").insert({age:"",name:""})
删 db.users("集合名").remove({id:""})
改 db.users("集合名").update({id:""},{$set:{name:"",age:""})
查 db.users("集合名").find({id:""}) (不传入参数则会返回整个collection)
mongoose 添加数据 列出了mongodb支持的数据类型 name 属性不能为空,前端表单需要做必填校验
const mongoose = require("mongoose")
// 协议 IP 端口 名称
mongoose.connect("mongodb://127.0.0.1:27017/bilibili")
// 连接成功后回调 on once(事件回调函数只执行一次)
mongoose.connection.once("open", () => {
console.log("连接成功");
// 创建文档的结构对象
// 确定表字段
let BookSchema = new mongoose.Schema({
name: {
type: String,
required: true
}, // 字段校验
author: {
type: String,
default: "匿名", //默认值
},
gender: {
type: Number,
enum: [0, 1] //枚举 gender只能是1 或者 2
},
style: {
type: String,
enum: ["言情", "末世"]
},
username: {
type: String,
unique: true // 用户名不能重复
},
price: Number,
is_hot: Boolean,
date: Date,
arr: Array,
test:mongoose.Schema.Types.Mixed, // 任意类型
id:mongoose.Schema.Types.ObjectId, // 文档iD
number:mongoose.Schema.Types.Decimal128 // 高精度类型
})
// 对文档进行操作的封装对象
let BookModel = mongoose.model('books', BookSchema)
// 调用方法
BookModel.create({ name: "围城", author: "钱钟书",gender:1, price: 19, is_hot: true, date: new Date(), arr: [1, 2, 3] }).then((err, data) => {
if (err) {
console.log(err);
return
}
// 成功 data为插入的文档对象
console.log(data);
// 项目中不会添加此代码
// mongoose.disconnect();
})
})
// 连接错误后回调
mongoose.connection.once("error", () => {
console.log("连接失败");
})
// 连接关闭后回调
mongoose.connection.on("close", () => {
console.log("连接关闭");
})
// 关闭
// setTimeout(() => {
// mongoose.disconnect()
// }, 2000);
条件语句查询 正则表达式查询
//6. 创建模型对象 对文档操作的封装对象
let BookModel = mongoose.model('novel', BookSchema);
// 根据条件获取 $lt = less than 获取价格小于20 的书籍
// let res = await BookModel.find({ price: { $lt: 20 } })
// 条件运算符
// $gt > $lt < $gle >= $lte <= $ne !==
// 逻辑运算符 $or || $and &&
// 根据条件获取 $gt = 大于 more than 获取价格大于20 的书籍
let res = await BookModel.find({ price: { $gt: 20 } })
let res = await BookModel.find({name:/三/ })
// let res = await BookModel.find({name:new RegExp('三') })
console.log(res);
个性化读取
//6. 创建模型对象 对文档操作的封装对象
let BookModel = mongoose.model('novel', BookSchema);
// 只返回自己需要的字段
// let res = await BookModel.find().select({ name: 1, author: 1 })
// 数据排序 只要name和price,同时不要_id sort 排序 升序 1 倒序 -1
// let res = await BookModel.find().select({name:1,price:1,_id:0}).sort({price:1})
// 数据截取 主要做分页 skip 跳过3个 limit 只返回3个
let res = await BookModel.find().select({name:1,price:1,_id:0}).sort({price:1}).skip(3).limit(3)
详细的操作可以访问www.runoob.com/mongodb/mon…