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

新手笔记,如果有错误的地方,希望各位大神多多指教。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值