MongoDB笔记

MongoDB笔记

非关系型数据库中的文档数据库 本质就是存各种各样的JSON
(数据库(集合(文档)))(数据库(集合(文档)))

安装使用步骤:

--下载安装
--将bin文件目录添加到path路径
--在C盘根目录创建文件夹data,在data中创建文件夹db
--打开命令行窗口 输入mongod 启动mongodb服务器 现在服务器开机自启
--另外打开命令行窗口 输入mongo连接mongodb服务器 出现>即为成功连接

基本指令

mongod --dbpath 完整路径 --port 端口号 设置数据存储位置和端口号 默认端口号为27017

show dbs 显示当前所有数据库

show collections 显示当前数据库的所有集合

use 数据库名 有就直接进入 没有就新建进入 数据库

db 当前所处数据库

CRUD

db.集合名.insert(doc) 集合中插入一个文档用对象{},多个用数组[{},{}]

插入时如果给文档指定_id属性,则数据库会自动为文档添加_id属性,作为文档唯一标识符

db.集合名.find({查询条件}) 查找集合中符合条件的所有文档 返回的是数组

db.集合名.find({查询条件},{指定元素:1...}) 查找集合中符合条件的所有文档 返回的是指定元素的数组(投影)

db.集合名.findOne({查询条件}) 查找集合中符合条件的第一个文档 返回的是对象

db.集合名.find({查询条件}).count() 返回集合中符合条件的文档数

db.集合名.find({查询条件}).skip(x) 跳过前x个集合中符合条件的文档 一般和limit联用 作为页码

db.集合名.find({查询条件}).limit(x) 返回集合中符合条件的文档 每次限制为x个 作为每页显示数

db.集合名.find({查询条件}).sort({排序规则:1|-1}) 返回集合中符合条件的文档 按照排序规则(升序|降序)返回

db.集合名.update({更新条件},{新对象}) 新对象属性会覆盖掉旧对象所有属性

db.集合名.update({更新条件},{$set:{设置属性}},{multi:true}) 文档设置指定属性 multi:true修改多个

db.集合名.update({更新条件},{$unset:{删除属性}},{multi:true}) 删除文档的指定属性

db.集合名.update({更新条件},{$push:{追加属性}},{multi:true}) 追加文档的指定属性 不考虑重复

db.集合名.update({更新条件},{$addToSet:{追加属性}},{multi:true}) 追加文档的指定属性 考虑重复

db.集合名.remove({删除条件},true) 删除集合中符合条件的所有文档 true为只删一个 条件若为空:清空集合

db.集合名.drop() 删除集合

db.dropDatabase() 删除当前所在数据库

db.集合名.find|update|remove({属性:{$eq:x}}) 查找|更新|删除 属性等于x的文档

db.集合名.find|update|remove({属性:{$gt:x}}) 查找|更新|删除 属性大于x的文档

db.集合名.find|update|remove({属性:{$gte:x}}) 查找|更新|删除 属性大于等于x的文档

db.集合名.find|update|remove({属性:{$lt:x}}) 查找|更新|删除 属性小于x的文档

db.集合名.find|update|remove({属性:{$lte:x}}) 查找|更新|删除 属性小于等于x的文档

db.集合名.find|update|remove({属性:{$ne:x}}) 查找|更新|删除 属性不等于x的文档

db.集合名.find|update|remove({$or:[{属性:{$gt:x}},{属性:{$lt:y}}]}) 查找|更新|删除 属性大于x或小于y的文档

db.集合名.find|update|remove({属性:{$gt:x,$lt:y}}) 查找|更新|删除 属性大于x 小于y的文档

db.集合名.update({属性:{$lt:x}},{$inc:{属性:y|-y}}) 更新 属性小于x的文档 自增|自减y

支持简单的javaScript脚本语言先把数据处理好 然后再用数据库语言处理 提高运行效率

文档之间关系

一对一:

db.lock.insert({
	name:'情比金坚七天锁',
	key:{name:'梅花十三'}
})

一对多:

db.teacher.insert([
	  {_id:001,name:'语文老师'},		
])
 /*都是语文的学生*/
db.student.insert([
	{name:'张三',  		
	 tea_Ids:{objectId('001')} 
	},
	{name:'李四',      
	tea_Ids:{objectId('001')}
	}
])

多对多:

db.teacher.insert([
     /*既是张三也是李四的老师*/
	  {_id:001,name:'语文老师'},		
	  {_id:003,name:'英语老师'} 		
])
	 /*既是语文老师的学生也是英语老师的学生*/
db.student.insert([
	{name:'张三',  		
	 tea_Ids:[objectId('001'),objectId('003')]     
	},
	{name:'李四',     
	tea_Ids:[objectId('001'),objectId('003')]
	}
])

mongoose

--Schema(模式对象) 约束数据库的文档结构
--Model 相当于文档集合
--Document 相当于文档

集合操作

芒果连接
// 引入mongoose数据库
const mongoose = require("mongoose")
// 连接mongoose数据库
mongoose.connect('mongodb://localhost:27017/mongoose_test', {useNewUrlParser: true, useUnifiedTopology: true})
// 监听mongoose数据库的连接状态   使用connection属性
// 开启事件
mongoose.connection.once("open",function(){
    console.log("数据库开启了");
}) 
// 断开mongoose数据库
// mongoose.disconnect()

// 关闭事件
mongoose.connection.once("close",function(){
    console.log("数据库关闭了");
}) 
芒果创建
// 创建约束对象
var schema = mongoose.Schema
var stuSchema = new schema({
  name: String,
  age: Number,
  gender: {
    type: String,
    default: 'female',
  },
  address: String,
})
// 创建Model集合        mongoose.model(集合名,集合约束)
var StuModel = mongoose.model('student', stuSchema )

芒果插入

// 向集合中插入文档对象或文档对象的数组   
StuModel.create({
    name:'张三',
    age:23,
    gender:'male', 
    address:'凌霄殿'
},function(err){
    if(!err){
        console.log('插入成功');
    }
})
芒果查询
// Model.find({查询条件},"投影",{查询选项limit等},[回调函数])
StuModel.find({name:'李四'},"address",{skip:3},function(err,docs){
  if(!err){
      console.log(docs);			//返回的是docs数组
  }
})
StuModel.findOne({name:'李四'},"address",{skip:3},function(err,doc){
  if(!err){
      console.log(doc);			//返回的是doc对象
  }
})
StuModel.findById(“id值”,function(err,doc){
  if(!err){
      console.log(doc);			//返回的是id值对应的doc对象
  }
})
芒果更新
// Model.update({更新条件},{修改后的对象$set...},{配置参数},回调函数)
StuModel.updateOne({name:'张三'},{$set:{address:'凌霄宝殿'}},{multi:true},function(err){
  if(!err){
    console.log('更新成功');
  }
})
芒果删除
//  Model.remove({删除条件},回调函数)
StuModel.remove({name:'王五'},function(){
  if(!err){
    console.log('删除成功');
  }
})
//  Model.deleteOne({删除条件},回调函数)   //删除第一个 
StuModel.deleteOne({name:'王五'},function(){
  if(!err){
    console.log('删除成功');
  }
})
芒果计次
// Model.count({查询条件},回调函数)
StuModel.count({name:'李四'},function(err,count){
  if(!err){
    console.log(count);
  }
})

文档操作

创建StuModel集合的文档stu
//新建文档
var stu = new StuModel({
	name:'赵四',
	age:88,
	address:'尼古拉斯城堡'
})
stu文档保存到集合
stu.save(function(err){
	if(!err){
	console.log(‘保存成功’)
	}
})
更新文档stu
stu.update({$set:{name:'赵四之孙'}},function(err){
	if(!err){
		console.log('更新成功')
	}
})
删除文档stu
stu.remove(function(err){
	if(!err){
	console.log('删除成功')
	}
})

stu.get('name')			//获取属性值
stu.set('name':'赵四曾孙')			//设置属性值
stu.toObject()      //转换为一个普通的JS对象   就不能用document的方法栈
stu.toJson()		//转换为一个Json对象
posted @   kq1024  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示