基本使用
可以通过 JSON 文件来理解 Mongodb 中的概念
- 一个JSON 文件 好比是一个数据库,一个 Mongodb 服务下可以有 N 个数据库
- JSON 文件中的 一级属性的数组值 好比是** 集合**
- 数组中的对象好比是 文档
- 对象中的属性有时也称之为 字段
一般情况下
- 一个项目使用一个数据库
- 一个集合会存储同一种类型的数据
下载地址: www.mongodb.com/try/downloa…
命令行交互
数据库命令
1.显示所有的数据库 show dbs
2.切换到指定的数据库,如果数据库不存在会自动创建数据库 use 数据库名
3.显示当前所在的数据库 db
4.删除当前数据库 use 库名 -> db.dropDatabase()
集合命令
1.创建集合 db.createCollection('集合名称')
2.显示当前数据库中的所有集合 show collections
3.删除某个集合 db.集合名.drop()
4.重命名集合 db.集合名.renameCollection('newName')
文档命令
1.插入文档 db.集合名.insert(文档对象)
2.查询文档 db.集合名.find(查询条件)
_id 是 mongodb 自动生成的唯一编号,用来唯一标识文档
3.更新文档
db.集合名.update(查询条件,新的文档)
db.集合名.update({name: "张三"},{ $set: { age: 19 } })
4.删除文档
db.集合名.remove(查询条件)
mongoose
Mongoose 是一个对象文档模型库,官网 www.mongoosejs.net/
方便使用代码操作 mongodb 数据库
使用流程
//1. 安装 mongoose
//2. 导入 mongoose
const mongoose = require('mongoose');
//3. 连接数据库
mongoose.connect('mongodb://127.0.0.1:27017/bilibili');
//4. 设置连接回调
//连接成功
mongoose.connection.on('open', () => {
console.log('连接成功');
//5. 创建文档结构对象
let BookSchema = new mongoose.Schema({
title: String,
author: String,
price: Number
});
//6. 创建文档模型对象
let BookModel = mongoose.model('book', BookSchema);
//7. 插入文档
BookModel.create({
title: '西游记',author: '吴承恩',price: 19.9
}, (err, data) => {
if (err) throw err;
//输出 data 对象
console.log(data);
//8. 断开连接
mongoose.disconnect();
});});
//连接出错
mongoose.connection.on('error', () => {
console.log('连接出错~~');})
//连接关闭
mongoose.connection.on('close', () => {
console.log('连接关闭');})
字段类型
类型 | 描述 |
---|---|
String | 字符串 |
Number | 数字 |
Boolean | 布尔值 |
Array | 数组,也可以使用 [] 来标识 |
Date | 日期 |
Buffer | Buffer 对象 |
Mixed | 任意类型,需要使用 mongoose.Schema.Types.Mixed 指定 |
ObjectId | 对象ID,需要使用 mongoose.Schema.Types.ObjectId 指定 |
Decimal128 | 高精度数字,需要使用 mongoose.Schema.Types.Decimal128 指定 |
字段验证
必填项
title : {
type: String,
required: true
}
默认值
author: {
type: String,
default: '默认值'
}
唯一值
username: {
type: String,
unique: true
}
unique 需要 重建集合 才能有效果
Mongoose 的 CURD
数据库的基本操作包括四个,增加(create),删除(delete),修改(update),查(read)
增加
插入一条
SongModel.create({
title:'给我一首歌的时间',
author: 'Jay'
}, function(err, data){
//错误
console.log(err);
//插入后的数据对象
console.log(data);
});
批量插入
//1.引入mongoose
const mongoose = require('mongoose');
//2.链接mongodb数据库 connect 连接
mongoose.connect('mongodb://127.0.0.1:27017/project');
// 3.设置连接的回调
mongoose.connection.on('open', () => {
// 4.声明文档结构
const PhoneSchema = new mongoose.Schema({
brand: String,
color: String,
price: Number,
tags: Array
})
// 6.创建模型对象
const PhoneSchema = mongoose.model('phone', PhoneSchema);
PhoneSchema.insertMany([
{
brand:'华为',
color:'灰色',
price:2399,
tags:['电量大','屏幕大','信号好']
},
{
brand:'华为',
color:'灰色',
price:2399,
tags:['电量大','屏幕大','信号好']
}
],(err, data) => {
if(err) throw err;
console.log("写入成功")
mongoose.connection.close()
})
})
删除一条数据
SongModel.deleteOne(
{_id:'5dd65f32be6401035cb5b1ed'}, function(err) {
if(err) throw err;
console.log('删除成功');
mongoose.connection.close();
});
批量删除
SongModel.deleteMany({author:'Jay'}, function(err) {
if(err) throw err;
console.log('删除成功');
mongoose.connection.close();
});
更新一条数据
SongModel.updateOne({author: 'JJ Lin'}, {author: '林俊杰'}, function (err) {
if(err) throw err;
mongoose.connection.close();
});
批量更新数据
SongModel.updateMany({author: 'Leehom Wang'}, {author: '王力宏'}, function (err) {
if(err) throw err;
mongoose.connection.close();
});
查询一条数据
SongModel.findOne({author: '王力宏'}, function(err, data) {
if(err) throw err;
console.log(data);
mongoose.connection.close();
});
//根据 id 查询数据
SongModel.findById('5dd662b5381fc316b44ce167',function(err, data){
if(err) throw err;
console.log(data);
mongoose.connection.close();
});
批量查询数据
//不加条件查询
SongModel.find(function(err, data){
if(err) throw err;
console.log(data);
mongoose.connection.close();
});
//加条件查询
SongModel.find({author: '王力宏'}, function(err, data){
if(err) throw err;
console.log(data);
mongoose.connection.close();
});
条件控制
运算符
在 mongodb 不能 > < >= <= !== 等运算符,需要使用替代符号
使用 $gt
- < 使用 $lt
= 使用 $gte
- <= 使用 $lte
- !== 使用 $ne
db.students.find({id:{$gt:3}}); id号比3大的所有的记录
逻辑运算
**$or **逻辑或的情况
db.students.find({$or:[{age:18},{age:24}]});
**$and **逻辑与的情况
db.students.find({ and: [{age: {lt:20}}, {age: {$gt: 15}}]});
正则匹配
条件中可以直接使用 JS 的正则语法,通过正则可以进行模糊查询
db.students.find({name:/imissyou/});
个性化读取
字段筛选
//0:不要的字段
//1:要的字段
SongModel.find().select({_id:0,title:1}).exec(function(err,data){
if(err) throw err;
console.log(data);
mongoose.connection.close();
});
数据排序
//sort 排序
//1:升序
//-1:倒序
SongModel.find().sort({hot:1}).exec(function(err,data){
if(err) throw err;
console.log(data);
mongoose.connection.close();
});
数据截取
//skip 跳过 limit 限定
SongModel.find().skip(10).limit(10).exec(function(err,data){
if(err) throw err;
console.log(data);
mongoose.connection.close();
});
最后,欢迎访问我的博客:chu-yang.top:8018/>?id=34