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