Python读取mongodb数据库

先附上mongodb的数据存储结构

然后直接附上完整代码:

import pandas as pd
import pymongo
import time


def get_time_stamp(str_time):  # 字符串转时间戳, 获取13位时间戳
    time_array = time.strptime(str_time, "%Y-%m-%d %H:%M:%S")
    time_stamp = time.mktime(time_array) * 1000
    return int(time_stamp)


def get_time_str(time_stamp):  # 时间戳转字符串
    time_array = time.localtime(int(time_stamp) / 1000)
    time_str = time.strftime("%Y-%m-%d %H:%M:%S", time_array)
    return time_str


def get_data_by_tum(localID, begin_time, end_time, mongoaddress, mongobase):
    """
    # 从MongoDB中读取数据
    :param localID: list [deviceid,dataoffset,category],[56601,8,20]
    :param begin_time: 数据开始时间,'2023-03-10 15:14:13'
    :param end_time: 数据截止时间,'2023-04-20 15:14:13'
    :param mongoaddress: MongoDB address,'mongodb://username:password@host:port'
    :param mongobase: MongoDB name,'dbname'
    :return:
    """
    client = pymongo.MongoClient(mongoaddress)  # 连接mongodb
    db = client.get_database(mongobase)  # 获取db库
    collettions = db[str(localID[0])]  # 获取collections中某个collection
    result = collettions.find(
        {'dataoffset': str(localID[2]),
         'category': str(localID[1]),
         'nowtime': {'$gte': begin_time, '$lte': end_time}})  # 获取该collection下面的数据
    timelist = []
    valuelist = []
    for r in result:
        timelist.append(get_time_str(r.get('nowtime')))  # 时间列表
        valuelist.append(float(r.get('value')))  # 数值列表
    result.close()
    if len(timelist) > 0:
        returndata = pd.DataFrame({'time': timelist, 'value': valuelist})  # 转换成数据框输出
    else:
        returndata = pd.DataFrame()
    return returndata


if __name__ == '__main__':
    localID = [65826, 60, 1]
    mongo_full_address = "mongodb://username:password@host1:port1, host2:port2, host3:port3"
    mongobase = "dbname"
    begin_time = get_time_stamp('2023-07-10 15:14:13')
    end_time = get_time_stamp('2023-08-20 15:14:13')
    dataget = get_data_by_tum(localID, begin_time, end_time, mongo_full_address, mongobase)
    print(dataget)

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Trisyp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值