一个简陋的数据库第三方库,使用JSON文件来保存数据,进行增删改查。
在没有数据库或者数据量小到不使用数据库的时候可以使用,了解即可。
MongoDB是一个基于分布式文件存储的数据库。
(相关资料图)
相比于纯文件管理数据,数据库管理数据有如下的特点:
为什么选择Mongodb,因为它的操作语法与JS类似,容易上手,学习成本低。
下载地址:https://www.mongodb.com/try/download/community
建议选择zip类型,通用性更强。
配置步骤如下:
看到waiting for connections就表明服务启动成功。
客户端程序
注意:
Mongoose是一个对象文档模型库。
方便我们使用代码去操作mongodb数据库。
npm i mongoose@6
// 导入mongooseconst mongoose = require("mongoose");// 连接mongoose服务mongoose.connect("mongodb://127.0.0.1:27017/bilibili"); // 如果bilibili数据库不存在会自动创建// 设置回调mongoose.connection.on("open", () => { console.log("连接成功");}); // 连接成功回调mongoose.connection.on("error", () => { console.log("连接失败");}); // 连接失败回调mongoose.connection.on("close", () => { console.log("连接关闭");}); // 连接关闭回调// 关闭mongodb的连接setTimeout(() => { mongoose.disconnect();}, 3000);
// 导入mongooseconst mongoose = require("mongoose");// 连接mongoose服务mongoose.connect("mongodb://127.0.0.1:27017/bilibili"); // 如果bilibili数据库不存在会自动创建// 设置回调mongoose.connection.on("open", () => { // 创建文档的结构对象,设置集合中文档的属性以及属性值的类型 let BookSchema = new mongoose.Schema({ name: String, author: String, price: Number }); // 创建模型对象,对文档操作的封装对象 let BookModel = mongoose.model("book", BookSchema); // 新增 // BookModel.create({ // name: "西游记", // author: "吴承恩", // price: 19.9 // }, (err,data) => { // if (err) { // console.log(err); // return; // } // // 如果没出错,则输出插入后的文档对象 // console.log(data); // }); // 新增多条 BookModel.insertMany([{ name: "西游记", author: "吴承恩", price: 19.9 },{ name: "西游记", author: "吴承恩", price: 19.9 },{ name: "西游记", author: "吴承恩", price: 19.9 }], (err,data) => { if (err) { console.log(err); return; } // 如果没出错,则输出插入后的文档对象 console.log(data); });}); // 连接成功回调mongoose.connection.on("error", () => { console.log("连接失败");}); // 连接失败回调mongoose.connection.on("close", () => { console.log("连接关闭");}); // 连接关闭回调
String:字符串
Number:数字
Boolean:布尔值
Array:数组
Date:日期
Buffer:Buffer对象
Mixed:任意类型,需要使用mongoose.Schema.Types.Mixed指定
ObjectId:对象ID,需要使用mongoose.Schema.Types.ObjectId指定
Decimal128:高精度数字,需要使用mongoose.Schema.Types.Decimal128指定
title: { type: String, required: true}
author: { type: String, default: "匿名"}
sex: { type: String, enum: ["男", "女"]}
username: { type: String, unique: true,}
unique需要重建集合才有效果。永远不要相信用户的输入。
// 导入mongooseconst mongoose = require("mongoose");// 连接mongoose服务mongoose.connect("mongodb://127.0.0.1:27017/bilibili"); // 如果bilibili数据库不存在会自动创建// 设置回调mongoose.connection.on("open", () => { // 创建文档的结构对象,设置集合中文档的属性以及属性值的类型 let BookSchema = new mongoose.Schema({ name: String, author: String, price: Number }); // 创建模型对象,对文档操作的封装对象 let BookModel = mongoose.model("book", BookSchema); // 删除一条 BookModel.deleteOne({_id: "6461be48670777b4e3f2bfcc"}, (err, data) => { if (err) { console.log(err); return; } console.log(data); }); // 批量删除 BookModel.deleteMany({is_hot: false}, (err, data) => { if (err) { console.log(err); return; } console.log(data); });}); // 连接成功回调mongoose.connection.on("error", () => { console.log("连接失败");}); // 连接失败回调mongoose.connection.on("close", () => { console.log("连接关闭");}); // 连接关闭回调
// 导入mongooseconst mongoose = require("mongoose");// 连接mongoose服务mongoose.connect("mongodb://127.0.0.1:27017/bilibili"); // 如果bilibili数据库不存在会自动创建// 设置回调mongoose.connection.on("open", () => { // 创建文档的结构对象,设置集合中文档的属性以及属性值的类型 let BookSchema = new mongoose.Schema({ name: String, author: String, price: Number }); // 创建模型对象,对文档操作的封装对象 let BookModel = mongoose.model("book", BookSchema); // 更新一条 // BookModel.updateOne({name: "西游记"}, {price: 9.9}, (err,data) => { // // 判断err // if (err) { // console.log("更新失败"); // return; // } // console.log(data); // }); // 批量更新 BookModel.updateMany({name: "西游记"}, {price: 9.9}, (err,data) => { // 判断err if (err) { console.log("更新失败"); return; } console.log(data); });}); // 连接成功回调mongoose.connection.on("error", () => { console.log("连接失败");}); // 连接失败回调mongoose.connection.on("close", () => { console.log("连接关闭");}); // 连接关闭回调
// 导入mongooseconst mongoose = require("mongoose");// 连接mongoose服务mongoose.connect("mongodb://127.0.0.1:27017/bilibili"); // 如果bilibili数据库不存在会自动创建// 设置回调mongoose.connection.on("open", () => { // 创建文档的结构对象,设置集合中文档的属性以及属性值的类型 let BookSchema = new mongoose.Schema({ name: String, author: String, price: Number }); // 创建模型对象,对文档操作的封装对象 let BookModel = mongoose.model("book", BookSchema); // 查询单条 BookModel.findOne({name: "西游记"}, (err, data) => { if (err) { console.log(err); return; } console.log(data); }); // 根据ID获取文档 BookModel.findById("6461c222f73d78ca0b9fd980", (err, data) => { if (err) { console.log(err); return; } console.log(data); }); // 批量获取(有条件) BookModel.find({author: "吴承恩"}, (err, data) => { if (err) { console.log(err); return; } console.log(data); }); // 无条件,读取所有 BookModel.find((err, data) => { if (err) { console.log(err); return; } console.log(data); });}); // 连接成功回调mongoose.connection.on("error", () => { console.log("连接失败");}); // 连接失败回调mongoose.connection.on("close", () => { console.log("连接关闭");}); // 连接关闭回调
在mongodb中,不能用><等运算符,要使用替代符号:
db.students.find({id:{$gt:3}}); id号比3大的所有文档
$or逻辑或的情况
db.students.find({$or:[{age:18}, {age:24}]});
$and逻辑与的情况
db.students.find({$and:[{age:18}, {age:24}]});
条件中可以直接使用JS的正则语法,可以进行模糊查询:
db.students.find({name:/imissyou/});
SongModel.find().select({_id:0, title:1}).exec(function(err, data) { if (err) throw err; console.log(data); mongoose.connection.close();})
SongModel.find().sort({hot:1}).exec(function(err, data) { if (err) throw err; console.log(data); mongoose.connection.close();})
// skip跳过,limit限定SongModel.find().skip(10).limit(10).exec(function(err, data) { if (err) throw err; console.log(data); mongoose.connection.close();})
去github上下载,免费
收费
关键词: