mongo在项目中的具体应用

SpringBoot通过Jwt验证登陆用户的身份 一、概述 用户身份验证主要有传统的Session认证和基于Token的认证 1.1 传统的Session认证 服务端根据用户的SessionID去Session中读取用户是否登陆的信息。 用户在登陆时向我们的服务器发送用户名和密码,通过验证后,服务器需要记录用户已经登陆的信息,以便用户继续请求其他接口时通过验证,用户已经登陆的信息是保存在服务器的Session中,随着登陆用户的增多,服务端... 阅读详情
package com.xxx.customerserviceadmin.dao;

import com.xxx.common.base.constant.CommonConstant;
import com.xxx.common.base.entity.ChatMessage;
import com.xxx.common.mongo.MongoDao;
import org.apache.commons.lang.StringUtils;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 保存聊天记录,查询聊天记录工具类
 * @Description:
 * @Date: Created in 11:32 2019/10/11
 */
@Repository
public class ChatMessageDao extends MongoDao{


    public void save(String productSign, ChatMessage chatMessage){
        this.mongoTemplate.insert(chatMessage, CommonConstant.chatMessagePre + productSign);
    }

    public ChatMessage getLastMessage(String productSign,String msgNum){
        Query query = new Query(Criteria.where("msgNum").is(msgNum));
        query.with(new Sort(Sort.Direction.DESC,"timestamp"));
        ChatMessage chatMessage = mongoTemplate.findOne(query, ChatMessage.class, CommonConstant.chatMessagePre + productSign);
        return chatMessage;
    }

    public List<ChatMessage> getUserMessage(String productSign, String msgNum, String timestamp,Integer pageSize){
        Query query = new Query();
        Criteria criteria = new Criteria();
        if(StringUtils.isNotBlank(timestamp)){
            query.addCriteria(criteria.orOperator(Criteria.where("msgNum").is(msgNum).and("timestamp").lt(timestamp),
                    Criteria.where("msgNum").is(msgNum).and("timestamp").lt(timestamp)));
        }else{
            query.addCriteria(criteria.orOperator(Criteria.where("msgNum").is(msgNum),
                    Criteria.where("msgNum").is(msgNum)));
        }
        query.with(new Sort(Sort.Direction.DESC,"timestamp"));
        query.skip(0);
        query.limit(pageSize);
        List<ChatMessage> chatMessages = mongoTemplate.find(query, ChatMessage.class, CommonConstant.chatMessagePre + productSign);
        return chatMessages;
    }
}
/**
 * 抽象类,对mongo的封装,用于其他类继承
 * @Description:
 * @Date: Created in 11:32 2019/10/11
 */
package com.xxx.common.mongo;

import com.mongodb.WriteResult;
import java.lang.reflect.Field;
import java.util.List;
import java.util.Set;
import javax.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;

public abstract class MongoDao<T> {
    private static Logger logger = LoggerFactory.getLogger(MongoDao.class);
    @Resource
    protected MongoTemplate mongoTemplate;

    public MongoDao() {
    }

    protected void setMongoTemplate(MongoTemplate mongoTemplate) {
        this.mongoTemplate = mongoTemplate;
    }

    public T save(T entity) {
        this.mongoTemplate.insert(entity);
        return entity;
    }

    public T findById(String id) {
        return this.mongoTemplate.findById(id, this.getEntityClass());
    }

    public T findById(String id, String collectionName) {
        return this.mongoTemplate.findById(id, this.getEntityClass(), collectionName);
    }

    public List<T> findAll() {
        return this.mongoTemplate.findAll(this.getEntityClass());
    }

    public List<T> findAll(String collectionName) {
        return this.mongoTemplate.findAll(this.getEntityClass(), collectionName);
    }

    public List<T> find(Query query) {
        return this.mongoTemplate.find(query, this.getEntityClass());
    }

    public T findOne(Query query) {
        return this.mongoTemplate.findOne(query, this.getEntityClass());
    }

    public long count(Query query) {
        return this.mongoTemplate.count(query, this.getEntityClass());
    }

    public WriteResult update(Query query, Update update) {
        return update == null ? null : this.mongoTemplate.updateMulti(query, update, this.getEntityClass());
    }

    public T updateOne(Query query, Update update) {
        return update == null ? null : this.mongoTemplate.findAndModify(query, update, this.getEntityClass());
    }

    public WriteResult update(T entity) {
        Field[] fields = this.getEntityClass().getDeclaredFields();
        if (fields != null && fields.length > 0) {
            Field idField = null;
            Field[] var4 = fields;
            int var5 = fields.length;

            for(int var6 = 0; var6 < var5; ++var6) {
                Field field = var4[var6];
                if (field.getName() != null && "id".equals(field.getName().toLowerCase())) {
                    idField = field;
                    break;
                }
            }

            if (idField == null) {
                return null;
            } else {
                idField.setAccessible(true);
                String id = null;

                try {
                    id = (String)idField.get(entity);
                } catch (IllegalArgumentException var8) {
                    logger.error("错误信息:{}", var8);
                } catch (IllegalAccessException var9) {
                    logger.error("错误信息:{}", var9);
                }

                if (id != null && !"".equals(id.trim())) {
                    Query query = new Query(Criteria.where("_id").is(id));
                    Update update = ReflectionUtils.getUpdateObj(entity);
                    return update == null ? null : this.mongoTemplate.updateFirst(query, update, this.getEntityClass());
                } else {
                    return null;
                }
            }
        } else {
            return null;
        }
    }

    public void remove(Query query) {
        this.mongoTemplate.remove(query, this.getEntityClass());
    }

    private Class<T> getEntityClass() {
        return ReflectionUtils.getSuperClassGenricType(this.getClass());
    }

    public Set<String> getCollectionName() {
        return this.mongoTemplate.getCollectionNames();
    }
}

/**
 * 聊天消息实体
 */
public class ChatMessage{
    private String msgNum;//聊天编号
    private String timestamp;// 消息发送时间
    private String fromUseId;//发送人id(融云注册id)
    private String toUserId;//接收人id(融云注册id)
    private String content;//消息内容
    private Integer type;//消息类型
    private Integer productId;//产品线id
    private String imageUri;//图片uri
    private String extra;//拓展字段

    public enum Type{
        txt( "文本消息"),
        img( "图片消息");
        private String showName;
        Type(String showName){
            this.showName = showName;
        }
        public String getShowName() {
            return showName;
        }
    }
     public ChatMessage(){}

    public ChatMessage(String msgNum, String timestamp, String fromUseId, String toUserId,String content, Integer type, Integer productId, String imageUri,String extra) {
        this.msgNum = msgNum;
        this.timestamp = timestamp;
        this.fromUseId = fromUseId;
        this.toUserId = toUserId;
        this.content = content;
        this.type = type;
        this.productId = productId;
        this.imageUri = imageUri;
        this.extra = extra;
    }
//省略了get,set方法......
}    
MongoDB 项目应用场景及入门基础概念介绍 总的来说,如果你的项目数据量在千万级别至上亿级别,并且字段不固定且经常变的,类似文档结构的数据,那么mongodb比较适合你的项目需求;如果数据量达几十亿至百亿级别,那么它将不适合你;还介绍了MongoDB的入门基础概念:数据库、集合、文档、数据类型等。 阅读详情

相关推荐

Mongo DB,Mongo Atlas,Mongo Compress 的安装与操作

MongoDB 介绍 非关系数据库 mongoDB面对的是非关系数据库,非关系是针对关系数据库所提出的概念。 SQLserver 是目前最受欢迎的关系数据库,数据是根据表格形式存储的,我们在建立工程之前必须提前设计好工程的主体,各个如主体之间的关系,因为随后输入的数据是按这些表格要求对应输入的。如下图,是一个书籍表,每一行表示一个书籍信息,每个信息都包括分类号,书名,出版社,作者,出版日期,...

qq_38024084的博客 4245

Java 获取计算机唯一标识

该程序,是将当前计算机的 操作系统名前缀 、 主板序列号、 MAC 地址、 CPU 序列号 组合成为JSON 字符串 作为当前计算机的唯一标识串。

叁金Coder 1万+

Mongo-C-Driver及Mongo-CXX-Driver的编译及使用

Mongo-C-Driver及Mongo-CXX-Driver的编译及使用前言Windows环境Mongo-C-Driver版本信息Cmake-GUICmake 控制台命令Mongo-CXX-Driver版本信息Cmake 控制台命令 前言 本人属于CMake小白,如有不足还望各位大神斧正. Mongo-C-Driver : 可以使用Cmake命令行及Cmake-GUI进行编译 Mongo-CXX-Driver : 可以使用Cmake命令行进行编译,Cmake-GUI会报无法找到bson库,添加路径以后依

纯粹的博客 2533

common.constant 常量枚举类型

common.constant 常量枚举类型 1.设置枚举常量    在constant文件夹里面构建枚举变量,在枚举里面定义属性和构建方法,最后构建枚举常量 2  调用枚举常量:枚举类.枚举常量.属性

Ilovezhangqishan的博客 3063

MongoDB 与 mongo-express docker 安装

这里借助 compose.yml 将 MongoDB 和 mongo-express 一起安装,这样两个容器可以公用一个网络环境,用于通信,这样mongo-express 可以直连 mongodb;与 MySQL 不同,MongoDB 为 NoSQL 数据库,MongoDB 中没有 table ,schema 概念,取而代之的 collection,其中 collection 存储的为 BSON 格式,是一种类似于 JSON 的用于存储 k-v 键值对数据,比较适用于 JS 应用开发。

小张Python 1761

搭建mongo-connector将mongo数据同步到es中

本文主要介绍通过mongo-connector​​​工具实现mongo数据同步到es中 mongo-connector实现原理 mongo-connector追踪oplog日志来实现实时同步数据 搭建mongo-connector 1.搭建python环境 2.安装pip命令 # 安装pip wget https://bootstrap.pypa.io/get-pip.py ...

lxl_118的博客 996

springbatch实操Demo

/* * Copyright yangjunxiong 2021 Wicrenet, Inc. All rights reserved. */ package com.aegonthtf.fate.service.batch; import com.aegonthtf.fate.constant.BatchConvertEnum; import com.aegonthtf.fate.constant.CommonConstant; import com.aegonthtf.fate.dto.JobBe

qq_40250122的博客 714

七自由度机械臂逆运动学实战:从几何简化到KDL库高效求解

本文深入探讨了七自由度机械臂逆运动学求解的实战方法。针对冗余自由度带来的挑战,文章对比了两种核心方案:一是利用任务约束进行几何简化,快速求解特定任务;二是基于DH参数法配置KDL库,实现通用高效的数值迭代求解。文中结合宇树H1机器人实例,详细阐述了从模型解析、参数提取到代码实现与验证的全流程,并提供了几何法与KDL库的适用场景对比与避坑指南。

weixin_29044713的博客 641

Think-Mongo 项目教程

Think-Mongo 项目教程 1. 项目目录结构及介绍 Think-Mongo 项目的目录结构如下: think-mongo/ ├── src/ │ ├── Adapter/ │ ├── Model/ │ └── ... ├── .gitignore ├── LICENSE ├── README.md ├── composer.json └── ... 目录结构介绍 src/:...

gitblog_00750的博客 674

基于EKF的UWB-IMU融合定位系统在农业机器人中的抗干扰优化与Matlab仿真

本文探讨了基于扩展卡尔曼滤波(EKF)的UWB-IMU传感器融合定位系统在农业机器人中的应用。通过Matlab仿真验证,该系统有效解决了农业环境中UWB信号遮挡和IMU累积误差问题,实现了厘米级高精度定位,显著提升了机器人在复杂场景下的抗干扰能力和导航可靠性。

numpy6sculptor的博客 625

笔记:使用Materials Studio计算聚合物的玻璃化转变温度

使用Materials Studio计算聚合物的玻璃化转变温度。

FXJgogogo的博客 1941

Graphene-Mongo 项目教程

Graphene-Mongo 项目教程 1. 项目介绍 Graphene-Mongo 是一个用于将 MongoEngine 与 Graphene 集成的开源项目。Graphene 是一个用于构建 GraphQL 模式的 Python 库,而 MongoEngine 是一个用于 MongoDB 的对象文档映射器(ODM)。Graphene-Mongo 使得开发者能够轻松地在 MongoDB 数据库上...

gitblog_00774的博客 450

从实验室到生活:构建一份全面的手机相机主观画质评测指南

本文详细介绍了如何从实验室数据转向实际体验,构建全面的手机相机主观画质评测指南。通过基础装备清单、室内外场景实战评测及数据之外的感知艺术,帮助用户发现手机相机在色彩还原、动态范围和夜景模式等方面的真实表现。特别关注主观体验与客观参数的差异,提供实用的评测技巧和报告撰写心法。

weixin_30940783的博客 309

mongo-express 项目教程

mongo-express 项目教程 1. 项目的目录结构及介绍 mongo-express/ ├── cypress/ ├── examples/ ├── lib/ ├── public/ ├── test/ ├── .cfignore ├── .dockerignore ├── .eslintignore ├── .eslintrc.yml ├── .gitattributes ├── .gi...

gitblog_00016的博客 578

comfyui中的k采样器报错Given groups=1, weight of size [320, 4, 3, 3], expected input[2, 8, 96, 54] to have 4

求助大佬!!!我运行comfyui的时候,k采样器变紫,同时报错显示:

M1226401728的博客 5181

四、通过Socket实现跟AGV小车通信(仅做Demo演示,跟实际工厂运行无关)

在通常情况下AGV的开发是使用PLC或者单片机,我们会使用MOXA等串口服务器配置485或者232通信。 我们会将AGV的MOXA设备配置成服务端。我们按照一定的数据协议从PLC或者单片机获得AGV的信息。 今天我抛开这些协议,通过工具模拟实现openTCS的Socket通信。 我这边用winform写了一个简单的Socket服务端工具(超简单那种) 我们的代码是基于第一篇文章的,具体参照 ht...

苏州周某人 1万+

Mongo-ES 开源项目教程

Mongo-ES 开源项目教程 1、项目介绍 Mongo-ES 是一个开源项目,旨在提供 MongoDB 和 Elasticsearch 之间的数据同步和转换功能。该项目通过简单的配置和操作,帮助用户在两个不同的数据库系统之间实现数据的实时同步,从而充分利用 MongoDB 的存储优势和 Elasticsearch 的搜索能力。 2、项目快速启动 环境准备 确保已安装 MongoDB 和 Ela...

gitblog_01106的博客 499

Python读取Matlab v7.3数据

文章目录Matlab保存数据Python读取 v7.3 Mat Matlab保存数据 在matlab设置中,常规->MAT文件,选择MATLAB版本7.3或更高版本保存数据。 注意保存数据的文件名为 corre.mat,保存的数据数组为data; 后面python的读取中会用到这两个参数 Python读取 v7.3 Mat 先安装hdf5storage库,再使用以下代码,就可以读取到mat中的数据,注意 import hdf5storage import numpy as np dataDi

weixin_43121914的博客 1082

Lua-Mongo 开源项目教程

Lua-Mongo 开源项目教程 项目介绍 Lua-Mongo 是一个用于 Lua 语言的 MongoDB 驱动程序,它允许 Lua 程序与 MongoDB 数据库进行交互。该项目旨在提供一个简单、高效且易于使用的接口,以便开发者在 Lua 环境中轻松地进行数据库操作。 项目快速启动 安装 首先,确保你已经安装了 Lua 和 LuaRocks。然后使用以下命令安装 Lua-Mongo: luaro...

gitblog_00564的博客 436

【从零开始学习SLAM】官方tf教程小海龟跟随程序

ros tf 进行坐标系之间转换的运算和发布

小秋 AI SLAM 入门实战教程 2034

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Mongo-K8s-Sidecar 使用教程

Mongo-K8s-Sidecar 使用教程 项目介绍 mongo-k8s-sidecar 是一个用于 Kubernetes 的开源项目,旨在简化 MongoDB 副本集的部署和管理。该项目通过在 Kubernetes 中运行一个边车(sidecar)容器,自动处理 MongoDB 副本集的初始化和维护任务。这使得在 Kubernetes 环境中部署和管理 MongoDB 变得更加容易和高效。 项...

gitblog_00842的博客 615

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Express-Node-Mongo-Skeleton 项目教程

Express-Node-Mongo-Skeleton 项目教程 项目介绍 Express-Node-Mongo-Skeleton 是一个专为快速启动Web应用程序而设计的模板。它演示了如何在Node.js环境中构建完整的CRUD(创建、读取、更新、删除)和REST操作。这个项目源于《如何创建完全的Express.js + Node.js + MongoDB CRUD和REST骨架》教程中的最终示...

gitblog_01111的博客 795

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Mongo-Express企业级部署终极指南:大型项目中的实际应用案例

Mongo-Express作为一款基于Web的MongoDB管理界面,为开发者和运维团队提供了直观、高效的数据库管理解决方案。🚀 本终极指南将深入探讨如何在企业级环境中部署Mongo-Express,并分享大型项目中的实际应用案例,帮助您充分利用这个强大的工具。 ## 为什么选择Mongo-Express进行企业级部署? Mongo-Express是一个基于Node.js和Express构建

gitblog_00511的博客 514

docker yml文件 启动mysql+mongo+mongo-express

首先查看mongo-express的docker文档,熟悉参数很重要: Name Default Description ME_CONFIG_BASICAUTH_USERNAME ‘’ mongo-express web username ME_CONFIG_BASICAUTH_PASSWORD ‘’ mongo-express web password ME_CONFIG...

qq_40896725的博客 1557

容器化运维操作(六)-Docker-compose——基本介绍 & 搭建本地mongo+mongo-express服务 & 应用-mongoose+mongodb

容器化运维操作(六)-Docker-compose——基本介绍 & 搭建本地mongo+mongo-express服务 & 应用-mongoose+mongodb Docker-compose介绍 通过 Docker-Compose 用户可以很容易地用一个配置文件定义一个多容器的应用,然后使用一条指令安装这个应用的所有依赖,完成构建。Docker-Compose 解决了容器与容器之间如何管理编排的问题。 Compose 中有两个重要的概念: 服务 (service) :一个应用的容器,实

weixin_44867717的博客 1885

Pydantic-Mongo 使用教程

Pydantic-Mongo 使用教程 项目介绍 Pydantic-Mongo 是一个基于 Pydantic 和 PyMongo 的 MongoDB 对象文档映射器(ODM)。它允许你利用 Pydantic 的数据验证和序列化能力,并通过 PyMongo 无缝集成到 MongoDB 中。Pydantic-Mongo 提供了一种简单的方式来定义 MongoDB 文档模型,并确保数据在存储和检索时的完...

gitblog_00590的博客 1011
上一篇: Mongo工具类
下一篇: redis工具类
hit、run
博客等级 码龄10年 163粉丝 157原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值