Mongodb 库、集合 文档 管理
2022-07-13
库管理
- 显示所有数据库列表【空数据库不会显示,或者说空数据库已经被 mongoDB 回收了。】
show dbs
show databases
- 切换数据库,如果数据库不存在则创建数据库。
use <database>
- 查看当前工作的数据库
db // 是db.getName() 的简写
- 删除当前数据库,如果数据库不存在,也会返回{"ok":1}
use demo; // 先切换到该数据库,才能删除该数据库
db.dropDatabase()
- 查看当前数据库状态
> db.stats()
{
"db" : "mofang",
"collections" : 0,
"views" : 0,
"objects" : 0,
"avgObjSize" : 0,
"dataSize" : 0,
"storageSize" : 0,
"numExtents" : 0,
"indexes" : 0,
"indexSize" : 0,
"scaleFactor" : 1,
"fileSize" : 0,
"fsUsedSize" : 0,
"fsTotalSize" : 0,
"ok" : 1
}
在mongodb中,最重要的核心是文档,如果一个库或者一个库下的集合中的文档全部被删除,则这个库和这个集合就会被mongodb回收;
集合管理
创建集合
在mongodb中其实不需要转门创建集合,直接添加文档,mongodb也会自动生成集合的;
//name 为必填参数,options 为可选参数。capped 若设置值为 true,则 size 必须也一并设置
db.createCollection (
name=<集合名称>,
options = {
capped: <boolean>, // 创建固定集,固定集指限制固定数据大小的集合,当数据达到最大值会自动覆盖最早的文档内容
size: <bytes size>, // 指定固定集合存储的最大字节数,单位:字节数。
max: <collection_size> //指定固定集合中包含文档的最大数量,单位:字节数
});
//添加文档到不存在的集合中,mongodb 会自动创建集合,
db.<集合名称>.insert({"name": "python。入门", "price": 31.4})
> db.courses.insert({"name": "python。入门", "price": 31.4})
WriteResult({ "nInserted" : 1 })
> show tables;
courses
集合列表
show collections // 或 show tables 或 db.getCollectionNames()
删除集合
db.集合.drop()
查看集合
db.getCollection('集合')
db.集合名称
查看集合创建信息
db.printCollectionStats()
文档管理
Mongodb 中文档 也叫 object/document.
数据类型
文档中的数据类型自动匹配格式;
Type | 描述 |
---|---|
ObjectID | 用于存储文档的 ID,相当于主键,区分文档的唯一字段,mongoDB 中就是一个对象的返回值 |
String | 字符串是最常用的数据类型,MongoDB 中的字符串必须是 UTF-8 编码 |
Integer | 整数类型用于存储数值。整数可以是 32 位,也可以是 64 位,这取决于你的服务器。 |
Double | 双精度类型用于存储浮点值,mongodbl 中没有 float 浮点数这个说法 |
Boolean | 布尔类型用于存储布尔值(true/ false) |
Arrays | 将数组、列表或多个值存储到一个键 |
Timestamp | 时间戳,用于记录文档何时被修改或创建。Date(), Timestamp(), ISODate() |
Object | 用于嵌入文档,相当于子属性是另一个 json 文档而已,这种方式就可以实现嵌套 |
Null | 空值,相当于 python 的 None |
Symbol | 与字符串用法相同,常用于某些使用特殊符号的语言 |
Date | 用于以 UNIX 时间格式存储当前日期或时间 |
Binary data | 二进制数据,常用于保存文件的内容,往往是图片,数据本身 |
Code | 用于将 JavaScript 代码存储到文档中 |
Regular expression | 正则表达式 |
添加文档
文档的数据结构和 JSON 基本一样。所有存储在集合中的数据在内部存储的格式最终都是 BSON 格式。
BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。
//添加文档
//1 方式 1:
db.集合名称.insert(<document>) // document 就是一个 json 格式的数据
//方式 2:
db.集合.insertOne( //如果文档存在 id 主键为更新数据,否则就添加数据。
<document>
)
//方式 3:
//一次性添加多个文档,多次给同一个集合建议使用 insertManyl 比 insertOne 效率更好
db.集合.InsertMany([
<document>,
<document>,
..
)]
操作
use mofang;
// 添加一条数据
db.user_list.insert({'name': 'laoli', 'age':33, 'sex':true, 'child': {'name'; 'xiaohuihui', 'age':3}});
// WriteResult({"nInserted": 1})
/*
// mongo 原则上内置了js解释引擎,所以支持js语法
> db.user_list.find()[0].id
> db.user_list.find()[0].name
> db.user_list.find()[0]._id
> db.user_list.find()[0].sex
> db.user_list.find()[0].age
> db.user_list.find()[0].child
> db.user_list.find().pretty()
> a = db.user_list.find().pretty()
> a.id
> a = db.user_list.findOne()
> a._id
> a.name
> a.sex
*/
// 添加一条数据
db.user_list.insertOne({'name': 'xiaozhang', 'age': 18, 'sex': true});
// 添加多条数据
document1 = {"name": "xiaolan", "age": 16}
document2 = {"name": "xiaoguang", "age": 16}
db.user_list.insertMany([document1, document2]);
// 查询数据
db.user_list.find()
删除文档
// 方式一
db.集合名称.remove(
<query>, // removed 的条件,一般写法:{"属性": {条件:值}}, 如果不填写条件,删除所有文档
{
justOne: <boolean>, // 可选删除,是否只删除查询到的第一个文档,默认为false,删除所有
writeConcern: <document> // 可选参数,抛出一场的级别
}
)
// 方式二 删除一条数据
db.集合名称.deleteOne(
<query>, // removed 的条件,一般写法:{"属性": {条件:值}}, 如果不填写条件,删除所有文档
{
justOne: <boolean>, // 可选删除,是否只删除查询到的第一个文档,默认为false,删除所有
writeConcern: <document> // 可选参数,抛出一场的级别
}
)
// 方式三,删除多条数据
db.集合名称.deleteMany(
<query>, // removed 的条件,一般写法:{"属性": {条件:值}}, 如果不填写条件,删除所有文档
{
justOne: <boolean>, // 可选删除,是否只删除查询到的第一个文档,默认为false,删除所有
writeConcern: <document> // 可选参数,抛出一场的级别
}
)
操作:
// 添加多条数据 测试
document1 = {"name": "xiaohei", "age": 16}
document2 = {"name": "xiaobai", "age": 16}
db.user_list.insertMany([document1, document2]);
//删除满足条件的第一条数据
// 条件 {"age": {$eq: 16}} 相当于 age==16
db.user_list.remove({"age": {$eq: 16}}, {"justOne": true})
//删除满足条件的所有数据,条件中 $eq 可以写,可以不写
db.user_1ist.remove({"age":16}); //等于可以省略不写,相当于 db.user_1ist.remove({"age": {$eq:16}});
// 删除多条
db.user_list.deleteMany({'age':16});
// 删除一条
db.user_list.deleteOne({'age':16});
显示排序
db.集合.find().sort({<key>:1}) // 升序,默认为生序;从小大大
db.集合.find().sort({<key>:-1}) // 降序
操作
db.user_list.find().sort({age:-1});
db.user_list.find().sort({age: -1, sex:1})
字段投影
显示字段
find() 方法默认将返回文档的所有数据,但是可以通过设置 find() 的第二个参数 projection,设置值查询部分数据。
语法:
// 获取一条
db.集合.findOne(
<query>, // 查询条件
{
<key>: 0, // 隐藏指定字段,例如:'_id':0,
<key>: 1, // 显示指定字段,例如:"title":1,
....
}
)
// 获取多条
db.结合.find(
<query>, // 查询条件
{
<key>:0, // 隐藏指定字段,例如:"_id":0,
<key>:1, // 显示指定字段,例如:"title":1,
...
}
)
操作:
db.user_list.find({'mobile':{$regex:/^133\d{8}$/}}, {"_id":0, "name":0}).sort({"mobile":-1})
限制与偏移
limit 方法用于限制返回结果的数量
skip 方法用于设置返回结果的开始位置
语法:
db.集合.find(...).limit(结果数量).skip(跳过数量)
终端操作:
db.user_list.find({},{"_id": 0, "name": 1, "age": 1}).sort({"age": 1}).limit(5);
db.user_list.find({}, {"_id": 0, "name": 1, "age": 1}).sort({"age": 1}).limit(5).skip(5);
更新文档
// 更新数据
db.集合.update(
<query>, // update 的查询条件,一般写法:{"属性": {条件: 值}}
<update>, // update的对象,一般写法{ $set:{"属性": "值"}} 或者 { $inc:{"属性": "值"} }
{
upsert: <boolean>, // 可选参数,可选参数,如果文档不存在,是否插入 objNew, true 为插入,默认是 false,不插入
multi: <boolean>, // 可选参数,是否把满足条件的所有数据全部更新,设置更新 1 条还是多条
writeConcern: <document> //可选参数,抛出异常的级别。
}
)
// 更新一条
db.集合.updateOne(
<query>,
<update>,
{
upsert: <boolean>, // 可选参数,可选参数,如果文档不存在,是否插入 objNew, true 为插入,默认是 false,不插入
multi: <boolean>, // 可选参数,是否把满足条件的所有数据全部更新,设置更新 1 条还是多条
writeConcern: <document> //可选参数,抛出异常的级别。
}
)
// 更新多条
db.集合.updateMany(
<query>, // update 的查询条件,一般写法:{"属性": {条件: 值}}
<update>, // update的对象,一般写法{ $set:{"属性": "值"}} 或者 { $inc:{"属性": "值"} }
{
upsert: <boolean>, // 可选参数,可选参数,如果文档不存在,是否插入 objNew, true 为插入,默认是 false,不插入
multi: <boolean>, // 可选参数,是否把满足条件的所有数据全部更新,设置更新 1 条还是多条
writeConcern: <document> // 可选参数,抛出异常的级别。
}
)