Some basic methods of MongoDB

//mongoose 第三方包
npm install mongoose
//提供connect方法连接数据库
const mongoose = require("mongoose");

mongoose
	.connect("mongodb://localhost/testdb", { useNewUrlParser: true, useUnifiedTopology: true })
	.then(() => console.log("数据库连接成功"))
	.catch((err) => console.log("数据库连接失败", err));

// 设置集合规则  .Schema(列表名:数据类型)
const courseSchema = new mongoose.Schema({
	name: String,
	author: String,
	isPublished: Boolean,
});

//创建集合并使用规则  .model(集合名(实际会小写然后+s  courses),规则)
const Course = mongoose.model("Course", courseSchema);

//创建集合实例创建文档
const course = new Course({
	name: "演员的自我修养",
	author: "人",
	isPublished: true,
});
//将数据保存到数据库中
course.save();

//集合的create方法创建文档
Course.create(
	{
		name: "演员的自我修养",
		author: "人",
		isPublished: true,
	},
	(err, doc) => {
		console.log(err);
		console.log(doc);
	}
);

//集合的create方法创建文档  返回promise一样可以通过promise的then catch
Course.create({
	name: "演员的自我修养",
	author: "人",
	isPublished: true,
})
	.then((doc) => console.log(doc))
	.catch((err) => console.log(err));

//导入数据  mongoimport  需要设置环境变量,在mongoDB/bin/中
//mongoimport -d 数据库名字 -c 合集名字 --file 要导入的数据文件

//查询文档  集合.find()  为空就查找所有文档 ,返回的结果一定是数组
Course.find().then((res) => console.log(res));

Course.find({ _id: "xxxxxxxxxxxxxxx" }).then((res) => console.log(res));

//.findOne()  查找一条
Course.findOne().then((res) => console.log(res)); //返回第一条数据

//返回第一个name为xxx的文档
Course.findOne({ name: "xxx" }).then((res) => console.log(res));

//大于&gt  小于$lt
Course.find({ age: { $gt: 20, $lt: 50 } }).then((res) => console.log(res));

//包含$in   张或王
Course.find({ name: { $in: ["张", "王"] } }).then((res) => console.log(res));

//查询字段name和age   -字段  表示不查询
Course.find()
	.select("name age -_id")
	.then((res) => console.log(res));

//查询结果排序   根据age升序   -age 降序
Course.find()
	.sort("age")
	.then((res) => console.log(res));

//skip()跳过多少条数据  limit()限制查询数量
Course.find()
	.skip(1)
	.limit(2)
	.then((res) => console.log(res));

//findOneAndDelete({})  删除第一个符合条件的  返回promise对象,res会是删除的文档
Course.findOneAndDelete({ name: "王" }).then((res) => console.log(res));

//deleteMany({})  删除多个   返回promise对象,res会是删除的文档
Course.deleteMany({ name: "王" }).then((res) => console.log(res));

//updateOne({条件},{修改的值})  更新一条   返回promise对象
Course.updateOne({ name: "张三" }, { name: "李四" }).then((res) => console.log(res));

//updateMant({条件},{修改的值})  更新多个 全部改为18  返回promise对象
Course.updateOne({}, { age: 18 }).then((res) => console.log(res));

//-------------------------------------------------------------------//
const Book = mongoose.model(
	"Book",
	new mongoose.Schema({
		name: {
			type: String,
			//必传字段  required:true
			required: [true, "书名为必须"],
			minlength: 2, //最小长度
			maxlength: 5, //最大长度
			trim: true, //去除两端空格  String方法里也有
		},
		age: {
			type: Number,
			min: 2, //数值最小2
			max: 5, //数值最大5
		},
		date: {
			type: Date,
			//默认值
			default: Date.now, //当前时间
		},
		category: {
			type: String,
			enum: ["哲学", "小说", "诗文"], //设定当前字段可以拥有的值
		},
		author: {
			type: String,
			//自定义验证器  返回布尔值
			validate: (v) => {
				return v && v == "Fc";
			},
			//自定义错误信息
			message: "信息传入错误",
		},
		author2: {
			//使用ID将Book集合和Course集合进行关联
			type: mongoose.Schema.Types.ObjectId,
			ref: "Course",
		},
	})
);

Book.create({
	//文档实例   date会自动输出
	name: "自我修养",
	age: 4,
})
	.then((res) => console.log(res))
	.catch((err) => {
		//获取错误对象
		const error = err.errors;
		//循环错误信息对象
		for (var attr in err) {
			console.log(err[attr]["message"]);
		}
	});

Book.find()
//关联查询,要输入关联的字段
	.populate(author2)
	.then((res) => console.log(res));
Published 6 original articles · Likes0 · Visits10

Guess you like

Origin blog.csdn.net/MikazukiMo/article/details/105620727