MongoDB 数据库的概念以增删改查
1,MongoDB概念解析:
Mongo数据库基本概念是文档,集合,数据库,下表给予介绍
SQL术语概念 | MongoDB术语概念 | 解释/说明 |
database | database | 数据库 |
table | collestion | 数据库/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表连接,MongoDB不支持 | |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
一个MongoDB中可以建立多个数据库.MongoDB的默认数据库为"db",该数据存在data目录中.MongoDB的单个 实例 可以容纳多个独立的数据库.每一个都有自己的集合权限,不同的数据库也放置在不同的文件中.
show dbs 展示所有数据库
以上实例命令中,"local"是要选择的数据库.
数据库名是保留的,可以直接访问这些特殊作用的数据库.
- admin: 从权限的角度来看,这是"root"数据库,钥匙将一个用户添加到这个数据库,这个用户自动继承所有的数据库的权限.一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器
- local:这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
- config:当Mongo用于分片设置式,config数据库在内部使用,用于白村分片的相关信息
2,MongoDB的查找:
查找语句:
// 插入多条数据用{},{}隔开
db.xiaopangpang.insertMany([{
"name":"xuexue",
"age":29,
"hobby":["继继","帅爆太阳的男人","帅爆太阳那人"]
}])
db.xiaopangpang.insertMany([{
"name":"xiaoxue",
"age":28,
"hobby":["帅爆太阳的men", "帅爆太阳的gentleman","帅爆太阳的行者"]
}])
db.xiaopangpang.insertMany([{
"name":"xueren",
"age":27,
"hobby":["多想再见你","哪怕匆匆一眼","就离去"]
}])
增加语句:
db.xiaopangpang.insertOne({
"name":"miss",
"age":26, })
更新语句:
})
// 更新编辑数据的操作
db.xiaopangpang.updateOne({"name":"xiaoxueza"},{$set:{"name":"laingxue"}})
db.xiaopangpang.updateMany({"age":{$gt:28}},{$set:{"age":30}})
db.xiaopangpang.find()
删除语句:
// 删除数据remove({})什么都不加把表里的数据都删除
db.xiaopangpang.remove({})
db.xiaopangpang.find({
"name":"miss"
})
// 删除表里边的数据
db.xiaopangpang.deleteOne({"name":"xiaoxue"})
db.xiaopangpang.find()
db.xiaopangpang.insertOne({
"name":"jdhjasfho",
"age":23,
"hobby":["fmkljfl","daf"]
})
3,MongoDB的进阶操作
3.1,大胖胖表的增删改查
// 大胖胖的表的增删该查
// 查看所有的表
show tables
db.dapangpang.find({})
修改器:
// 修改器
db.dapangpang.updateOne({"name":"雪雪"},{$set:{"name":"雪雪"}})
//$unset 简单粗暴的删除字段
db.dapangpang.updateOne({"name":"雪雪"},{$unset:{"name":"雪雪"}})
db.dapangpang.insertOne({
"name":"雪人",
"hobby":[
"me",
"my",
"i",
"miss"
]
})
// 插入年龄的字段
db.dapangpang.updateMany({},{$set:{"age":26}})
// $inc引用增加
db.dapangpang.updateMany({"name":"雪ren"},{$inc:{"age":2}})
db.dapangpang.remove({})
db.dapangpang.insertMany([{
"name":"雪雪",
"hobby":[
"帅爆太阳的男人", "帅爆太阳那人", "帅爆太阳的men"
],
"age":27
},
{
"name":"小雪",
"hobby":[
"花落翩翩", "时光旋转","慢慢沦陷"
],
"age":26
}])
// array操作,在array中添加一个新的元素
db.dapangpang.updateOne({"name":"雪人"},{$push:{"hobby":"miss"}})
// pull在array中删除一个的元素
db.dapangpang.updateOne({"name":"雪雪"},{$pull:{"hobby":"帅爆太阳那人"}})
//pop不含索引-1,从前往后, 1从后往前
db.dapangpang.updateOne({"name":"小雪"},{$pop:{"hobby":1}})
db.dapangpang.updateOne({"name":"小雪"},{$pop:{"hobby":-1}})
//保留索引条件数据的下标,实际是定位到那个字典或者列表
db.dapangpang.updateOne({"hobby":"me"},{$set:{"hobby.$":"it's ok!"}})
// Object字典的操作
db.dapangpang.updateOne({"name":"雪雪"},{$set:{feature:["perfect", "lovely","stubborn"]}})
db.dapangpang.updateOne({"name":"雪雪"},{$set:{feature:{"size":32,}}})
db.dapangpang.updateOne({"name":"雪雪"},{$inc:{"feature.size":5}})
// 修改hobby中的big
db.dapangpang.updateOne({"hobby.depth":6},{$set:{"hobby.$.big":26}})
//limit表示从当前位置选择若干个
db.dapangpang.find({}).limit(2)
// skip跳过
db.dapangpang.find({}).skip(2)
// sort排序
db.dapangpang.find({}).sort({age:-1})
db.dapangpang.find({}).sort({"name":1})
// limit + skip + sort 分页
// 优先级最高的为sort
// 其次为skip
// 最低级为limit
db.dapangpang.find({}).limit(1).sort({age:-1}).skip(1)
4,MongoDB在python中的应用
- 连接MongoDB服务器
import pymongo
from bson import ObjectId # 连接mongo服务器
mongo_client = pymongo.MongoClient(host="127.0.0.1", port=27017)
MONGO = mongo_client.get_database("xuexue")
tb = MONGO.get_collection("dapangpang")
print(tb)
- 查找数据
# 查询数据库
res = tb.find()
print(res, type(res))
for data in res:
print(data)
res1 = tb.find_one({"name": "雪雪"})
print(res1)
res2 = tb.find({"$or":[{"name":"小雪"}, {"hobby": "帅爆太阳的男人"}]})
for data in res2:
print(data)
res_obj = tb.find_one({"_id":ObjectId(res1["_id"])})
print(res_obj)
- 增加数据
# 增加数据
# res = tb.insert_one({"name": "雷子", "age": 24,"hobby":["健身", "学习", "小说"]})
# print(res,res.inserted_id)
# ret = tb.find_one({"name":"雷子"})
# print(ret)
# res1 = tb.insert_many([{
# "name": "郝哥", "age": 27, "hobby":["宋 ", "振", "中"]},
# {"name": "佳丽", "age": 27, "hobby": ["还真不了解", "也不知道为什么", " 可能是鬼迷心窍了吧 "]}
# ])
# print(res1)
# ret1 = tb.find_one({"name": "郝哥"})
# ret2 = tb.find_one({"name": "佳丽"})
# print(ret1, ret2)
# ret3 = tb.find()
# for data in ret3:
# print(data)
- 修改数据
# 修改数据
res = tb.update_one({"name": "佳丽"}, {"$set": {"age": 27}})
print(res,dir(res), res.raw_result)
ret = tb.find_one({"name": "佳丽"})
print(ret)
- 删除数据
# 删除数据
# res = tb.delete_one({"name": "雷子"})
# print(res, dir(res), res.raw_result)
# res1 = tb.delete_many({"name": "郝哥"})
# print(res1, res1.raw_result)
# res = tb.find()
# for data in res:
# print(data)
# print(res)
MongoDB 数据库的概念以增删改查的更多相关文章
- MongoDB数据库的操作,增删改查
在student集合中插入一些数据 db.student.insert({ "学号":10010, "姓名":"德莱文", "年龄 ...
- MySQL基本概念及增删改查操作
SQL.DB.DBMS关系 DB: DataBase(数据库,数据库实际上在硬盘上以文件的形式存在) DBMS: DataBase Management System(数据库管理系统,常见的有:MyS ...
- sqlite数据库操作详细介绍 增删改查,游标
sqlite数据库操作详细介绍 增删改查,游标 本文来源于www.ifyao.com禁止转载!www.ifyao.com Source code package com.example ...
- MySQL数据库之表的增删改查
目录 MySQL数据库之表的增删改查 1 引言 2 创建表 3 删除表 4 修改表 5 查看表 6 复制表 MySQL数据库之表的增删改查 1 引言 1.MySQL数据库中,数据库database就是 ...
- Delphi - cxGrid连接Oracle数据库 实现数据的增删改查
cxGrid连接Oracle数据库 实现数据的增删改查 cxGrid连接Oracle数据库 1:通过OraSession连接数据库.OraDataSet实现OraSession和OraDataSour ...
- 使用JDBC分别利用Statement和PreparedStatement来对MySQL数据库进行简单的增删改查以及SQL注入的原理
一.MySQL数据库的下载及安装 https://www.mysql.com/ 点击DOWNLOADS,拉到页面底部,找到MySQL Community(GPL)Downloads,点击 选择下图中的 ...
- day38 mycql 初识概念,库(增删改查),表(增删改)以及表字段(增删改查),插入更新操作
在Navicat中把已经生成的表逆向成模型 数据库上,右键-逆向数据库到模型 ego笔记: 增删改查 文件夹(库) 增 create database day43 charset utf8; 改 al ...
- MongoDB 之 手把手教你增删改查 MongoDB - 2
我们在 MongoDB 之 你得知道MongoDB是个什么鬼 MongoDB - 1 中学习了如果安装部署一个 MongoDB 如果没看到我的金玉良言的话,就重新打开一次客户端和服务端吧 本章我们 ...
- MongoDB简介,安装,增删改查
MongoDB到底是什么鬼? 最近有太多的同学向我提起MongoDB,想要学习MongoDB,还不知道MongoDB到底是什么鬼,或者说,知道是数据库,知道是文件型数据库,但是不知道怎么来用 那么好, ...
随机推荐
- 页面布局排版-block,inline,float,relative,absolute等
1.span和div的区别 div是块元素(block),span是行内元素(inline): span什么事也不会做,它存在的目的在与为开发者给它所围绕的元素指定样式.div类似,不过它引入了行分隔 ...
- new命令的原理
function Person(name, age) { this.name = name; this.age = age } var person = new Person('小明', 18); c ...
- c++_加法变乘法
加法变乘法 我们都知道:1+2+3+ ... + 49 = 1225现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015 比如:1+2+3+...+10*11+12+...+27*28+29+ ...
- Python旅途——文件操作
Python--文件操作 1.理解文件操作 可能有的时候有人会在想为什么要对文件进行操作,无论对于文件还是网络之间的交互,我们都是建立在数据之上的,如果我们没有数据,那么很多的事情也就不能够成立,比如 ...
- Python旅途——简单语法
1. 前言 在我们对环境以及pycharm安装好之后,我们就可以开始我们的Python之旅了,那么,我们学习一门语言应该如何开始呢?就像我们学习汉语一样,从abcd这些拼音学起,而对于我们Python ...
- reversing.kr replace 之write up
好似reversing除了前几个容易些,后面的都很难的.看wp都很困难.首先wp提示crtl+n查看程序所有函数,并且找到了测试函数: 补充: GetDlgItemInt函数通过发送控件WM_GETT ...
- linux 文件三大特殊权限(SUID SGID SBIT)
SGID(这个应该是文件共享里面最常用权限管理手段) 作用于目录或可执行程序,作用于目录代表在此目录创建的文件或目录,默认的属组继承此目录的属组.例如 我这个testgroup 没有设置SGID .我 ...
- STM32F407 独立看门狗 个人笔记
什么是看门狗 如果程序跑飞了怎么办? 可以用看门狗来监控. 看门狗是: 一个递减的计数器,如果不按时给计数器赋值,计数器的值减到一定程度,就会使系统复位. 也就是说如果程序运行异常,无法正常给计数器赋 ...
- [luoguP1360] [USACO07MAR]黄金阵容均衡Gold Balanced L…
传送门 真的骚的一个题,看了半天只会个前缀和+暴力.. 纯考思维.. 良心题解 #include <cstdio> #include <cstring> #include &l ...
- 【数学】codeforces C. Maximal GCD
http://codeforces.com/contest/803/problem/C [题意] 给定两个数n,k(1 ≤ n, k ≤ 10^10) 要你输出k个数,满足以下条件: ①这k个数之和等 ...