首页 > 数据库 >MongoDB笔记

MongoDB笔记

时间:2022-10-16 12:57:22浏览次数:53  
标签:name err MongoDB db 笔记 文档 集合 属性

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对象

标签:name,err,MongoDB,db,笔记,文档,集合,属性
From: https://www.cnblogs.com/kq981024/p/16795991.html

相关文章

  • HTML5+CSS3笔记
    HTML1、独占一行的称为块元素li是块元素2、a标签中target属性的可选值<ahref="https://www.baidu.com"target="_self">本页面打开</a><ahref="https://www.......
  • JavaScript笔记
    JavaScript原型链每创建一个函数,解析器都会想函数中添加一个prototype原型属性,这个prototype属性对应着一个对象,这个对象就是原型对象如果该函数是普通函数调用,则proto......
  • Axios笔记
    axios笔记基本知识axios返回的是一个promise对象axios将服务器返回结果自动json解析变成对象形式请求拦截器和响应拦截器请求拦截器中可以对config请求参数进行修改......
  • VueRouter笔记
    前言由于Vue框架是SPA(单页面应用)不会有不同的html提供给我们跳转,所以要使用路由进行页面的跳转,Vue路由允许我们通过不同的URL访问不同的内容。通过Vue可以实现多视......
  • 【MySQL】实战教程笔记
    序言感谢林晓斌老师,感谢他的教程:https://funnylog.gitee.io/mysql45/MySQL的基础架构主要分为两层服务层连接器:管理连接,验证权限。尽量使用长连接查询缓存:对一个表......
  • kubernetes学习笔记4-pod
    Pod资源定义​自主式pod资源,很少用到,手动创建的资源,用kubectldelete后不会自动创建,而使用pod控制器管理的才会按照用户期望的重新创建;​资源清单:一级字段(apiVersion|kind|m......
  • 详解降维-主成分分析-概率角度(Probabilistic PCA)【白板推导系列笔记】
    教科书对PCA的推导一般是基于最小化重建误差或者最大化可分性的,或者说是通过提取数据集的结构信息来建模一个约束最优化问题来推导的。事实上,PCA还有一种概率形式的推导,那......
  • 详解支持向量机-硬间隔SVM-模型定义【白板推导系列笔记】
    支撑向量机(SVM)算法在分类问题中有着重要地位,其主要思想是最大化两类之间的间隔。按照数据集的特点:1. 线性可分问题,如之前的感知机算法处理的问题2. 线性可分,只有一点......
  • AD笔记总结
    原理图要点:1、新建工程,新建的project是要以后缀PrjPCB2、新建原理图、PCB,右键project,进行New添加3、新建原理图库、PCB库,右键project,进行new添加改变单位显示:View......
  • 笔记本外接显卡方案
    前言本博客的上一篇文章更新于2021年2月,距今已经有一年半了。这一年半我一切正常,没有经历任何糟糕的事情,一直没更新纯粹是因为太忙。一年半的高压下来,我的心态也变化了不......