mangodb的存储
mongodb基本命令
mongo #进入mongo命令行
show dbs #查看所有数据库
use tutorial #切换到名为tutorial的数据库
show collections #查看数据库下的所有集合,例如集合名为QuoteItem
db. QuoteItem.find() #查看集合QuoteItem下的所有数据
1. 插入数据
import pymongo client = pymongo.MongoClient(host='localhost', port=) # 连接数据库
db=client.test #指定数据库
collection = db.students #指定集合,相当于数据表 student1 = {
'id': '',
'name': 'lilei',
'age': ,
'gender':'female'
} student2 = {
'id': '',
'name': 'hong',
'age': ,
'gender':'male'
}
# 插入一条数据
#result1 = collection.insert_one(student1) # 插入多条数据
result2 = collection.insert_many([student1, student2]) #print(result1)
#print(result1.inserted_id) #获得_id print(result2)
print(result2.inserted_ids) #获得_id列表
注意
1. 插入一条和插入多条不能同时写入,否则会ID冲突的报错
2. 在mongoDB中,每条数据都有一个_id属性来唯一标识。如果没有显示指明该属性,mongodb会自动产生一个ObjectId类型的_id属性
2. 查询
from bson.objectid import ObjectId
import pymongo client = pymongo.MongoClient(host='localhost', port=)
db=client.test
collection = db.students
#find_one()查询一条数据
result1 = collection.find_one({'name': 'hong'})
result2 = collection.find_one({'_id': ObjectId('5b4ef71ea5979a113cfa8bc0')}) # find()用来查询多条数据,返回类型是cursor的一种生成器
result3 = collection.find({'age':})
# 查询年龄大于20的数据
result4 = collection.find({'age': {'$gt': }})
# 查询名字以h开头的数据
result5 = collection.find({'name': {'$regex': '^h.*'}}) print(type(result1))
print(result1)
print(result2)
print(result3)
for result in result3:
print(result) for result in result4:
print(result) print("\n正则匹配")
for result in result5:
print(result)
2.1 比较符号
| 符号 | 含义 | 示例 |
| $lt | 小于 | {'age': {'$lt': 20}} |
| $gt | 大于 | {'age': {'$gt': 20}} |
| $lte | 小于等于 | {'age': {'$lte': 20}} |
| $gte | 大于等于 | {'age': {'$gte': 20}} |
| $ne | 不等于 | {'age': {'$ne': 20}} |
| $in | 在范围内 | {'age': {'$in': [20, 23]}} |
| $nin | 不在范围内 | {'age': {'$nin': [20, 23]}} |
2.2 功能符号
| 符号 | 含义 | 示例 | 示例含义 |
| $regex | 匹配正则表达式 | {'name': {'$regex': '^M.*'}} | name以M开头 |
| $exists | 属性是否存在 | {'name': {'$exists': True}} | name属性存在 |
| $type | 类型判断 | {'age': {'$type': 'int'}} | age的类型为int |
| $mod | 数字模操作 | {'age': {'$mod': [5, 0]}} | 年龄模5余0 |
| $text | 文本查询 | {'$text': {'$search': 'Mike'}} | text类型的属性中包含Mike字符串 |
| $where | 高级条件查询 | {'$where': 'obj.fans_count == obj.follows_count'} | 自身粉丝数等于关注数 |
更详细的用法可到官方文档找到:https://docs.mongodb.com/manual/reference/operator/query/
3. 计数,排序,偏移
import pymongo client = pymongo.MongoClient(host='localhost', port=)
db=client.test
collection = db.students # 一共有多少条数据的计数
count1 = collection.find().count()
print(count1) # 符合某个条件的数据的计数
count2 = collection.find({'age': }).count()
print(count2) #排序,按年龄升序; 降序的话用DESCENDING
result1 = collection.find().sort('age', pymongo.ASCENDING)
print([result['age'] for result in result1]) # 按年龄升序排序,从第4个数据开始输出
result2 = collection.find().sort('name', pymongo.ASCENDING).skip() # 按年龄升序排序,从第4个数据开始输出,并且限制输出2条数据
result3 = collection.find().sort('name', pymongo.ASCENDING).skip().limit() print([result['name'] for result in result2])
print([result['name'] for result in result3])
4. 更新
4.1 update_one()更新一条数据
import pymongo client = pymongo.MongoClient(host='localhost', port=)
db=client.test
collection = db.students condition = {'name':'hong'} #定义一个按条件查找的变量 #按条件找出数据并修改
student = collection.find_one(condition)
student['name'] = 'hong123' #使用update_one()更新一个数据
result = collection.update_one(condition, {'$set':student}) print(result)
#调用matched_count和modified_count属性获得匹配的数据条目和影响的数据条目
print(result.matched_count, result.modified_count)
注意:
$set的作用是只更新student字典内存在的字段,如果原先还有其他字段,则不会更新,也不会删除。
如果不用$set的话,则会把之前的数据全部用student字典替换,如果原本存在其他字段,则会被删除
4.2 update_many() 更新多条数据
import pymongo client = pymongo.MongoClient(host='localhost', port=)
db=client.test
collection = db.students condition = {'age':}
#condition = {'age': {'$gt': }} 年龄大于20的 # {'$inc': {'age': }}这里表示age=20的数据全部加1,也就是改为21
result = collection.update_many(condition, {'$inc': {'age': }}) print(result)
print(result.matched_count, result.modified_count)
5. 删除
from bson.objectid import ObjectId
import pymongo client = pymongo.MongoClient(host='localhost', port=)
db=client.test
collection = db.students #result1 = collection.remove({'_id': ObjectId('5b4ef71ea5979a113cfa8bc0')})
#result2 = collection.delete_one({'name': 'hong'})
result3 = collection.delete_many({'age': {'$lt':}) #print(result1)
print(result3.deleted_count)
传统的方式是用remove(),可删除符合条件的一个或者多个数据
新的方式是用delete_one() 删除一条数据,delete_many() 删除多条数据,这种方法可用deleted_count属性来获取删除的数据条目
mangodb的存储的更多相关文章
- MySQL基础入门使用和命令的使用
数据库了解 概念 数据库就是一种特殊的文件,其中存储着需要的数据 一个数据库可以有多张表 MySQL是一种关系型数据库 具有关联性数据的就是关系型数据库 MySQL是一种软件可以用来创建mysql数据 ...
- 非关系统型数据库-mangodb
第三十六课 非关系统型数据库-mangodb 目录 二十四 mongodb介绍 二十五 mongodb安装 二十六 连接mongodb 二十七 mongodb用户管理 二十八 mongodb创建集合. ...
- MangoDB高级应用
MongoDB高级应用 Author:SimpleWu 聚合 聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果.有点类似sql语句中的 count(*). ...
- MongoDB存储基础教程
一.MongoDB简介 1. mangodb是一种基于分布式.文件存储的非关系型数据库 2. C++写的,性能高 3. 为web应用提供可扩展的高性能数据存储解决方案 4. 所支持的格式是json格式 ...
- python中级---->pymongo存储json数据
这里面我们介绍一下python中操作mangodb的第三方库pymongo的使用,以及简单的使用requests库作爬虫.人情冷暖正如花开花谢,不如将这种现象,想成一种必然的季节. pymongo的安 ...
- mangodb与mysql的区别及部署
一, mangodb与mysql的区别 mangoDB与MYSQL都是开源的数据库,但是mysql是传统的关系型数据库,mangdb则是非关系型数据库,也可以称之为文档型数据库,是一种NoSQL的数据 ...
- MongoDB01——安装MangoDB
一.MongoDB的下载 到MongoDB的官网——https://www.mongodb.com/download-center/community,选择要下载的版本,点击Download 二.安装 ...
- MangoDB篇章(1)
关系型数据库遵循ACID规则 事务(transaction)4个特性:原子性(A).一致性(C).独立性(I).持久性(D) : 分布式系统(distributed system): 由多台计算机和通 ...
- python爬虫27 | 当Python遇到MongoDB的时候,存储av女优的数据变得如此顺滑爽~
上次 我们知道了怎么操作 MySQL 数据库 python爬虫26 | 把数据爬取下来之后就存储到你的MySQL数据库. MySQL 有些年头了 开源又成熟又牛逼 所以现在很多企业都在使用 MySQL ...
随机推荐
- Selenium+TestNG+Maven 搭建
Java环境配置 Eclipse配置TestNG Eclipse配置Maven pom.xml文件相关配置,添加依赖selenium和TestNg的jar包 <!-- https://mvnre ...
- 简单API练手:(1)复制自身程序到windows目录和系统目录下;(2)获得系统的相关信息。
1.复制自身程序到windows目录和系统目录下: #include <windows.h> #include <stdio.h> #include <string.h& ...
- 解题报告-1012. Numbers With Repeated Digits
Given a positive integer N, return the number of positive integers less than or equal to N that have ...
- Shiro和Spring 集合实现同一个账号只能一个人在线使用,其它人在使用进行剔除(八)
1.实现原理其实就是自定义过滤器,然后登录时,A登录系统后,B也登录了,这个时候获取此账号之前的session给删除,然后将新的session放入到缓存里面去,一个账户对应一个有序的集合 编写自定义过 ...
- jvm编译环境搭建 Debina篇
这里参考了 <Java虚拟机精讲> <深入理解Java虚拟机 JVM高级特性与最佳实践> http://www.cnblogs.com/zxfdream/p/5411511.h ...
- log4j 使用记录
又很懒了.. 好久没来了,必须自我批评一下... ===========================我是分割线============================= 鼎鼎大名的log4j,要说 ...
- va泛型
va泛型 什么是泛型? 泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数化类型时指定的 ...
- 持续集成与devops
持续集成 持续集成 持续集成(Continuous integration,简称CI),简单的说持续集成就是频紧地(一天多次)将代码集成到主干,它的好处主要有两个: 1.快速发现错误.每完成一次更新, ...
- HDU 5120 Intersection (圆的面积交)
题意:给定两个圆环,求两个圆环的面积交. 析:很容易知道,圆环面积交就是,大圆与大圆面积交 - 大圆和小圆面积交 - 小圆和大圆面积交 + 小圆和小圆面积交. 代码如下: #pragma commen ...
- Poj2231 Moo Volume 2017-03-11 22:58 30人阅读 评论(0) 收藏
Moo Volume Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 22104 Accepted: 6692 Descr ...