MongoDB 基础教程

本文详细介绍了MongoDB的安装、启动、基本操作及Mongoose模块的使用。涵盖了数据的增删改查、查询条件设置、排序、分页等常用功能,适合初学者快速掌握MongoDB的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MongoDB

1. 认识MongoDB

1.1 启动MongoDB

$ mongod --dbpath /data/mongodb --port 27017

1.2 启动MongoDB命令行

# 启动MongoDB
$ mongod --dbpath /data/mongodb
# 打开另一个命令行窗口(上一个不关闭)
$ mongo

1.3 MongoDB数据结构

在这里插入图片描述

1.4 基本指令

  • MongoDB 无需创建数据库,集合,只有在创建文档的时候会自动创建
# 显示所有数据库
$show dbs
# 显示所有数据库
$show databases
# 切换到TestDataBases 数据库
$use TestDataBases
# 显示当前使用的数据库名
$db
# 显示当前数据库有多少个集合
$show collections

2. MongoDB CURD

2.1 C: 添加数据

# 进入数据库
$use test
# db 代表当前数据库(test),student 代表一个集合, {name:"111"} 代表集合中一条数据
$db.student.insert({name:"111"})
# 插入一个文档
$db.student.insertOne({name:"c", age:"12", sex:"1"})
# 插入多个文档, 必须使用[]
$db.student.insertMany([{name:"d", age:"11", sex:"0"}])

2.2 R: 查找数据

# 查找student中所有的数据
$db.student.find()
$db.student.find({})
# 查找指定内容的数据
$db.student.find({name:"cc"})
$db.student.find({name:"cc", age:"12"})
# 查找第一个返回的数据
$db.student.findOne({name:"cc"})
# 返回数据的个数
$db.student.find().count()
$db.student.find().length()
# 查看函数的实现
$db.student.find().count

2.3 U: 修改数据

# 修改指定的文档,会把寄存的都修改了(默认只修改第一个)
$db.student.update({name:"cc"}, {age:"11"})
# 修改或添加指定文档的字段(默认只修改第一个)
$db.student.update({name:"cc"}, {$set:{age:"11"}})
# 删除指定的字段(默认只修改第一个)
$db.student.update({name::"cc", {$unset:{age:"11"}}})
# 修改一个
$db.student.updateOne({name:"cc"}, {$set:{age:"11"}})
# 修改多个
$db.student.updateMany({name:"cc"}, {$set:{age:"11"}})
# update 完整配置
$db.student.update({name:"cc"}, {$set:{pp:"dsds"}}, {multi:true})
# 替换
$db.student.replaceOne({name:"cxw"}, {name:"11"})
# 查找数据,指定抽出字段(name) (1:表示抽出, 0表示不抽出) (默认_id是抽出的)
$db.student.find({}, {name:1, age:0})

2.4 D: 删除数据

# 删除全部的数据,但是集会还存在(必须传参数)
$db.student.remove({})
# 删除全部的数据,但集合也删除了
$db.student.drop()
# 删除(默认可以删除多个)
$db.student.remove({name:"cc"})
# 删除一个
$db.student.remove({name:"cc"}, true)
$db.student.deleteOne({name:"cc"})
# 删除多个
$db.student.deleMany({name:"cc"})

3.MongoDB 练习题

3.1 T1

# 1.进入myTest数据库
# 2.向数据库的user集合中插入一个文档
# 3.查询user集合中的文档
# 4.向数据库的user集合中插入一个文档
# 5.查询数据库user集合中的文档
# 6.统计数据库user集合中的文档数量
# 7.查询数据库user集合中的username为sunwukong的文档
# 8.向数据库user集合中的username为sunwukong的文档,添加一个address属性,属性值为huaguoshan
# 9.使用 {username:"tangseng"} 替换 username 为 zhubajie的文档
# 10.删除 username 为 sunwukong 的文档的 address属性

$ use myTest
$ db.user.insert({name:"testname"})
$ db.user.find()
$ db.user.insert({name:"testname"})
$ db.user.find()
$ db.user.find().count()
$ db.user.find({name:"sunwukong"})
$ db.user.update({name:"sunwukong"}, {$set:{address:"huaguoshan"}})
$ db.user.update({name:"zhubajie"}, {name:"tangseng"})
$ db.user.update({name:"sunwukong"}, {$unset:{address:""}})

3.2 T2

# 向一个集合中的文档的一个属性是数组的属性添加一条数据
# 例如 {usrname:"123", friend:[{name:"n1", age:"12"}, {name:"n2", age:"13"}]
$db.users.update({username:"123"}, {$push:{friend:{name:"n3", age:"14"}}})
# 此方式也能添加,但是区别在于,如果此数据已存在那么addToSet则不会添加
$db.users.update({username:"123"}, {$addToSet:{friend:{name:"n3"}, age:"14"}})

3.3 for

# 插入多条数据 (插入数据慢)
for (var i = 0; i < 100; i++) {
	db.user.insert({num:i})
}

# 插入多条数据,插入快
array = []
for (var i = 0; i < 100; i++) {
	array.push({num:i})
}
db.user.insert(array)

3.4 比较

# 查找age大于 20 的文档
$ db.users.find({age:{$gt:20}})
# 查找age大于20,小于30的文档
$ db.user.find({age:{$gt:20, $lt:30}})
# 查找前十条数据
$ db.user.find().limit(10)
# 查找10-20条数据
$ db.user.find().skip(10).limit(10)

4.MongoDB 函数

4.1 排序

# 升序
$db.student.find({}).sort({name:1})
# 降序
$db.student.find({}).sort({name:-1})
# 多字段排序
$db.student.find({}).sort(name:1, age:1)

5.Mongoose

  • Schema : 约束,类似于文档结构
  • Model : 模型,类似于集合
  • Document : 文档,类似于数据

5.1 安装mongoose

# 进入项目目录下
$ sudo npm i mongoose --save

5.2 创建连接

var mongoose = require("mongoose");
mongoose.connect("mongodb://127.0.0.1:27017/test", { useNewUrlParser: true, useUnifiedTopology: true});

5.3 Schema

var Schema = mongoose.Schema;
var stuSchema = new Schema({
    name:String,
    age:Number,
    gender:{
        type:String,
        default:"female"
    },
    address:String
});

var StuModel = mongoose.model("student", stuSchema);
StuModel.create({
    name:"cc",
    gender:"male",
    address:"beijing"
}, function (err) {
    if(!err) {
        console.log("success")
    }
})

5.4 使用Model进行增删改查

5.4.1 增加
# 使用model多个增加数据
# 通用格式 xxModel.create([{}, {}], function(err){})
StuModel.create([{
    name:"c1",
    gender:"male",
    address:"beijing"
}, {
    name:"pp",
    gender:"fmeale",
    address: "hangzhou"
}], function (err) {
    if(!err) {
        console.log("success")
    }
})
5.4.2 查找
# 查找数据(返回)
StuModel.find({name:"cc"}, function(err, docs) {
		console.log(docs)
})

# 查找数据,指定抽出字段
StuModel.find({name:"cc"}, {name:1}, function(err, docs) {
  console.log(docs)
})

# 查找数据,指定抽出字段(方法二)
StuModel.find({name:"cc"}, 'name', function(err, docs) {
  console.log(docs)
})

# 查找数据,指定不抽出字段
StuModel.find({name:"cc"}, '-name', function(err, docs) {
  console.log(docs)
})

# 查找数据,options(skip limit)
StuModel.find({name:"cc"}, {name:1}, {skip:0, limit:1}, function(err, docs) {
	console.log(docs)
})

# 根据ID查找数据
StuModel.findById("5ef45c332462d526e7a12ddf", function(err, docs) {
    console.log(docs)
})
5.4.3 修改
# 修改文档
StuModel.update({name:"cc"}, {$set:{gender:"12"}}, function(err, docs) {
    console.log(docs)
})
5.4.4 删除
# 删除数据
StuModel.remove({name:"cc"}, function(err) {
	console.log(err)
})
5.4.5 个数
# 返回个数
StuModel.count({name:"cc"}, function(err, count) {
	console.log(count)
})

5.5 使用Document进行增删改查

5.5.1 增加
# 使用StuModel创建一个Document对象
var stu = new StuModel({
	name:"c",
	age:11,
	gender:"male",
	address:"pp"
})
# 将Document写入数据库
stu.save(function(err) {
  if(!err) {
  	console.log()  
  }
})
5.5.2 修改
# 修改
StuModel.findOne({}, function(err, docs) {
	docs.update({}, {$set:{name:"ppp"}}, function(err) {
		if(!err) {
			console.log("修改成功")
		}
	})
  # 或者使用
  docs.name = "ppp"
  docs.save()
})
5.5.3 删除
# 删除
StuModel.findOne({}, function(err, docs) {
	docs.remove(function(err) {
		if(!err) {
			console.log("删除成功")
		}
	})
})
5.5.4 查找
# 查找
StuModel.findOne({name:"pp"}, function(err, docs) {
    console.log(docs.get("name"))
    docs.set("name", "iiii")
    docs.save()
})
5.5.5 类型转换
# 转换为Object
StuModel.findOne({name:"pp"}, function(err, docs) {
	docs.toObject()
	# 可以删除文本信息
	delete docs.name
	console.log(docs)
})

6. 模块化

  • 创建一个模块js, 将连接信息,以及模型放入
  • 使用require在需要的地方进行导入
# 导入模块
require("./common.js")
  • common.js 导出模型数据
  • 使用导出的模型数据
var Schema = mongoose.Schema;
var stuSchema = new Schema({
    name:String,
    age:Number,
    gender:{
        type:String,
        default:"female"
    },
    address:String
});



var StuModel = mongoose.model("student", stuSchema);
# 导出StuModel为exports.model
exports.model = StuModel
var StuModel = require("./common.js").model
  • 或者将整个模块只作为模型导入
var Schema = mongoose.Schema;
var stuSchema = new Schema({
    name:String,
    age:Number,
    gender:{
        type:String,
        default:"female"
    },
    address:String
});



var StuModel = mongoose.model("student", stuSchema);
# 导出StuModel为Module.exports
Module.exports = StuModel
var StuModel = require(./common.js)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值