![bd5ea51b1cae00fb1849975c1fd33b36.png](https://img-blog.csdnimg.cn/img_convert/bd5ea51b1cae00fb1849975c1fd33b36.png)
将数据读写到MongoDB
MongoDB is a cross-platform document-oriented database program. Classified as a NoSQL database program, MongoDB uses JSON-like documents with optional schemas. MongoDB is developed by MongoDB Inc. and licensed under the Server Side Public License (SSPL).--wiki
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可拓展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。MongDB最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。---百度百科
这里需要使用到pymongo,没有安装的需要先安装:pip install pymongo.
或者在jupyter里面用代码安装:
!pip install pymongo
一、连接MongoDB
比如我们要对图片中的local database下面的test数据集进行读写操作。
![3d5aea1ff53e1c27fd8e7f0ac6e44e9a.png](https://img-blog.csdnimg.cn/img_convert/3d5aea1ff53e1c27fd8e7f0ac6e44e9a.png)
先和它建立连接:
from pymongo import MongoClient
client=MongoClient(host='localhost',port=27017)
db=client.local #temp 里面的 local database
collection=db.test #local database里面的test dataset
二、写入数据到MongoDB,insert documents
插入一条数据使用:Collection.insert_one({:,:,:,:})
插入多条数据使用:collection.insert_many([])
collection.insert_one({"baby_id":1,"gender":'F',"hair_color":"yellow"})
只插入一条数据的结果:
![f9ab504f564b9ec7a70485b45717eb08.png](https://img-blog.csdnimg.cn/img_convert/f9ab504f564b9ec7a70485b45717eb08.png)
collection.insert_many([{"baby_id":2,"gender":'M',"hair_color":"black"},
{"baby_id":3,"gender":'M',"hair_color":"brown"},
{"baby_id":4,"gender":'F',"hair_color":"red"}])
插入多条数据的结果:
![af36639ac463f19830c4521ae193a650.png](https://img-blog.csdnimg.cn/img_convert/af36639ac463f19830c4521ae193a650.png)
三、从MongDB读取数据 Query Documents
使用find读取数据,find()括号里面设置查找条件,第一个{}里面具体的查找条件,第二个{}里面设置是否要保存该变量,0为不需要,1为需要读取该变量。如果对于某个时间的变量要求,大于或等于某个时间,需对该变量设置时间条件,"$gte"表示greater than and equal。
#例如
collection.find({"Time":{"$gte":'2020-12-01 00:00:00'}},{"_id":0,"Time":1,"temperature":1})
下面对步骤二中插入的数据进行读取:
dic=collection.find({"baby_id":2},{"_id":0,"baby_id":1,"gender":1})
list1=[]
for item in dic:
list1.append(item)
pd.DataFrame(data=list1)
![a0b984f3eb31467083994e837ccab1b2.png](https://img-blog.csdnimg.cn/img_convert/a0b984f3eb31467083994e837ccab1b2.png)
查看MongoDB数据库,可以使用Studio 3T:
![8b9a704fe2f9ae268a230cc5e6081add.png](https://img-blog.csdnimg.cn/img_convert/8b9a704fe2f9ae268a230cc5e6081add.png)
![de0d69087a77a82fa5a3c9c8dcdf2950.png](https://img-blog.csdnimg.cn/img_convert/de0d69087a77a82fa5a3c9c8dcdf2950.png)
Studio3t官网:https://studio3t.com/
将数据读写到Redis
Redis is an open source(BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures such as strings, hashes, list, sets,sorted setswith range queries, bitmaps, hyperloglogs, geospatial indexes with radius queries and streams. Redis has built-in replication, Lua scripting, LRU eviction, transactions and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster.--https://redis.io/
Redis(Remote Dictionary Server),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
key指的是数据库中的键:比如下图中db0,0库中的文件如下所示,其中包含animal文件夹,该文件夹下面包含flow文件夹,flow文件夹下面包含tag_on文件夹,再下一级可以看到一个像钥匙一样的图标,这个钥匙就是一个key,这个可以用“animal:flow:tag_on:49346410xxx”表示,里面存储的内容就是这个key的value,组合在一起就是key:value对。
![62066dcbc06392b04be1220e76c2f513.png](https://img-blog.csdnimg.cn/img_convert/62066dcbc06392b04be1220e76c2f513.png)
一、连接Redis
先安装redis哈,jupyter里面安装的话,直接在代码前面加感叹号就可以了。
!pip install redis
连接单结点:
import redis
r=redis.Redis(host='172.168.1.199',port=6379)
连接集群:
from rediscluster import RedisCluster
startup_nodes=[{"host":"172.168.1.158","port":"7000"},{"host":"172.168.1.158","port":"7001"},
{"host":"172.168.1.159","port":"7000"},{"host":"172.168.1.159","port":"7001"},
{"host":"172.168.1.160","port":"7000"},{"host":"172.168.1.160","port":"7001"}]
rc=RedisCluster(startup_nodes=startup_nodes,decode_responses=True)
二、写入数据到Redis集群
如果把整个表写到一个key下面,语句写法如下,但是查看的时候会很慢。
r.set(key,dataframe.to_json())
所以可以做循环,把每行写到一个key里面,查看的时候就不会卡了。
写入到单节点:
for i in range(len(markid_temp_ok)):
key='animal:flow:tag_on:'+markid_temp_ok['mark_id'][i]
r.set(key,markid_temp_ok[i:i+1].to_json()) #前面建立连接时单节点 r
写入到集群:
for i in range(len(markid_temp_ok)):
key='animal:flow:tag_on:'+markid_temp_ok['mark_id'][i]
rc.set(key,markid_temp_ok[i:i+1].to_json()) #前面连接连接时集群 rc
三、从Redis集群中读取数据
基本语句如下:
r.get('key')
如果存的是json格式,那么读完之后需要转化格式可以直接使用pandas中的module,获得该key下面的内容。
pd.read_json(r.get(“key”))
#单节点
pd.read_json(r.get("animal:flow:tag_on:493464105479311360"))
![f28f5a4456a643e6658abe59093122f8.png](https://img-blog.csdnimg.cn/img_convert/f28f5a4456a643e6658abe59093122f8.png)
#集群,结果都是一样的
pd.read_json(rc.get("animal:flow:tag_on:493464105479311360"))
![07b2933c2e1d96cd9fdfb282d45aaf85.png](https://img-blog.csdnimg.cn/img_convert/07b2933c2e1d96cd9fdfb282d45aaf85.png)
查看redis集群可以使用Redis Desktop Manager
![d1027916a31f739bdc09a987f0b7e0aa.png](https://img-blog.csdnimg.cn/img_convert/d1027916a31f739bdc09a987f0b7e0aa.png)
Redis Desktop Manager 官网:https://rdm.dev/