MongoDB

本文介绍了MongoDB的基本操作,包括连接数据库、查看版本、显示数据库状态、删除数据库、创建和管理集合、查询数据、插入内容、重命名集合以及删除记录。同时提到了Schema模式对象在文档结构约束中的作用。

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

一、MongoDB
相信大家最先学习的数据库应该是mysql这类关系型的数据库,那既然有了这么成熟的数据库了,我们为什么还要使用新的数据库呢?是因为Mysql在处理海量数据的时候效率会显著的变慢,所以就诞生了mongoDB这类的nosql数据库了。
下面我们先来了解一下什么是mongodb
1、mongodb数据存储格式
mongodb 使用json格式来存储记录,也就是说一条记录就是一个json,而存贮在mongodb是 以BSON形式来存放
也就是说,数据记录的格式是json,数据存放格式是BSON。
BSON就是json的二进制编码存储格式。
2、分布式和集群的区别
分布式就是多台机器分别做不同的工作,每台机器负责特定的工作。集群就是多台机器做着一样的工作。
3、mongodb的增删查改
(1)对数据库层级的操作
  • 在客户端指定数据库进行连接
  use test (test为数据库名,当没有这个数据库的时候,会自动创建这个数据库,但是如果没有给这个数据库创建集合,就会自动删除这个数据库)
  • 查看当前数据库版本 db.version()
  • 显示当前数据库 db
  • 显示数据库当前状态 db.stats()
  • 查看当前数据库连接的主机db.getMongo()
  • 删除数据库 db.dropDatabase()
(2)对集合层级的操作
  • 创建集合 db.createCollection(“name”)
  • 查看当前数据库下所有的集合 show collections\db.getCollectionNames()
  • 查看集合里面的内容 db.collectionName.find()
  • 查看第一条记录findOne()
  • 查询指定条件的记录find({uid:1000})
  • 查询总的记录数count()
  • 查询去掉当前集合中某列的重复数
  • 插入内容 db.collection.inser(data)
可以看到,mongodb会自动创建一个_id作为主键。
  • 重命名集合 db.collection.renameCollection(’newname')
  • 删除集合 db.collection.drop()
  • 删除集合中的记录数remove({})//记得里面有个大括号
因为我们在服务器中读取数据库,为了安全,我们要对数据库的访问加以限制。
现在我们的目的是,创建一个用户,这个用户是给服务器来操控我们数据库。
下面来一起操作
首先先进入到amin
use admin
然后创建一个用户
db.createUser({})
Role用于指定权限,db指定哪个数据库
db.createUser({user:"krys",pwd:"kryspwd",roles:[{role:"dbAdmin",db:"device"}]})
那怎么在node中使用mongodb呢,这里需要用到一个插件就是mongoose。那我们先来学习一下mongoose。
  • Schema 模式对象,这个对象定义 约束数据库中的文档结构
  • model 是集合中的所有文档,相当于mongodb中的collection(表)
  • document  表示集合中的具体文档,相当于row 一行记录
  • schema生成model,model生成document
下面我们来写一下用户表,然后来写一个注册登录的功能。
所以我们先定一个mongoose.js,这个文件用来连接数据库
const mongoose = require('mongoose')
const DB_URL = 'mongodb://user:password@127.0.0.1:27017/iot?authSource=admin'
mongoose.connect(DB_URL)
mongoose.connection.on('connected',function() {
console.log('Mongoose connection open to '+DB_URL);
});
/**
* 连接异常 error 数据库连接错误
*/
mongoose.connection.on('error',function(err) {
console.log('Mongoose connection error: '+ err);

});
/**
* 连接断开 disconnected 连接异常断开
*/
mongoose.connection.on('disconnected',function() {
console.log('Mongoose connection disconnected');
});

module.exports = mongoose

然后在项目根目录下面,创建一个models文件夹,并创建一个user.js.
好了,抛开mongoose。我们先来定义一下用户需要哪些字段。用户唯一识别id,用户昵称nickname,用户登录的账号username,用户性别sex,用户密码password。
在mongoose中,一切始于schema。每一个schema都会映射到一个mongodb collection。
那我们先创建一个schema
var mongoose = require('../db/mongoose');

var Schema = mongoose.Schema;

var userSchema = new Schema({

uid:String,//用户id 唯一
nickname:String,//用户昵称
sex:Number,//用户性别
username:String,//用户登录的账号
password:String,//用户密码
})

如果后续要加key,使用add方法来添加。此外,支持的类型有如下几种
* String
* Number
* Date
* Buffer
* Boolean
* Mixed
* ObjectId
* Array
有了schema 接下来我们要将这个schema转换为一个model
var User = mongoose.model('User',userSchema);
然后把这个User给export出来
var mongoose = require('../db/mongoose');

var Schema = mongoose.Schema;

var userSchema = new Schema({

uid:String,//用户id 唯一
nickname:String,//用户昵称
sex:Number,//用户性别
username:String,//用户登录的账号
password:String,//用户密码
});
var User = mongoose.model('User',userSchema);
module.exports = User

接下来我们在api中创建处理用户登录的方法
 
exports.login = async (req, res) => {

const { username,password } = req.query;

User.findOneAsync({ //查询数据库是否有该用户

username:username,
}).then(result => {

if (result) {

if(result.password == password){

//密码正确
result.password = '';

res.json({
code: 200,

message: '获取成功',

data: result

});
}else{
res.json({
code: 301,

message: '密码错误',

});
};
} else {

//注册一个账号,
let createD = moment().format('YYYY-MM-DD HH:mm:ss');

let updateD = moment().format('YYYY-MM-DD HH:mm:ss')

User.create({
username:username,
nickname:'新用户',//用户昵称
sex:0,//用户性别
password:password,//用户密码
creat_date: createD,

update_date: updateD,

}).then(result => {

result.password = '';

res.json({
code: 200,

message: '获取成功',

data: result

});
});
};
})
.catch(err => {

})
}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值