继续造轮子-MongoDB写日志

MongoDB Query API 核心实战:从 CRUD 到聚合优化 MongoDB 查询接口是面向文档数据库的核心交互范式,其基于 BSON 结构与声明式操作符(如 $gt、$elemMatch、$regex)的设计,天然适配半结构化数据与高动态业务模型。原理上依赖索引驱动的高效扫描、内存映射读取与管道式执行引擎,技术价值体现在开发效率跃升与复杂聚合亚秒响应。典型应用场景包括电商商品多条件检索、用户行为日志分析、实时消息未读统计等。本文聚焦 MongoDB Query API 的工程化落地,深入解析 CRUD 语义差异、精准过滤器构建、聚合管道优化及索引设计铁律,覆盖 in 阅读详情

微信公众号:Java患者
专注Java领域技术分享

继上一篇文章

我造了一个轮子去写系统日志

MongoDB

MongoDB我们都知道是一个Nosql,其次MongoDB可以存储海量数据,正好满足我们的需求,日志本身就会很多,基本每一个操作可能都会保存一条日志记录,如果选用mysql或者oracle的话成本感觉相对较高,而MongoDB会存在少量数据丢失的情况,当然我们用来保存日志,少几条操作也没关系?是吧!

MongoDB是将数据存储为一个文档的格式,文档格式则类似于一个JSON对象。

{
    name: "Zero",
    date: "2020-05-20",
    detail: "客户支付了十元",
    type: "payment"
}

MondoDB简单搭建

package com.zero.na;

import com.mongodb.MongoClient;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;

/**
 * 芒狗DB 工具类
 */
public class MongodbUtil {

    private String DEFAULT_DATABASE_NAME = "test";

    private MongoClient mongoClient;

    private static MongodbUtil instance = new MongodbUtil();

    private MongodbUtil() {
        mongoClient  = new MongoClient("152.136.**.**", 27017);
    }

    public static MongodbUtil getInstance() {
        return instance;
    }

    // 插入
    public void insert(String collectionName, Document doc, Object id) {
        if (id != null) {
            doc.put("_id", id);
        }
        insertOne(DEFAULT_DATABASE_NAME, collectionName, doc);
    }

    private void insertOne(String default_database_name, String collectionName, Document doc) {
        MongoDatabase mongoDatabase = getMondoDatabase(default_database_name);
        mongoDatabase.getCollection(collectionName).insertOne(doc);

    }

    private MongoDatabase getMondoDatabase(String default_database_name) {
        MongoDatabase database = mongoClient.getDatabase(default_database_name);
        return database;
    }

}

在原有的写日志类中添加保存日志业务 WriteLogUtil.java

 private void write(Map<String, String> item) {
        Document document = new Document();
        for (String key : item.keySet()) {
            document.put(key, item.get(key));
        }
        MongodbUtil.getInstance().insert("test", document, null);
    }

效果


读日志

package com.zero.na;

import org.bson.Document;

import javax.print.Doc;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class WriteLogUtil {

    // 省略......


    private List<Document> query (String name) {
        return MongodbUtil.getInstance().query("test", name);
    }
}
package com.zero.na;

import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;
import org.bson.BsonDocument;
import org.bson.Document;
import org.bson.conversions.Bson;

import javax.print.Doc;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.function.Consumer;

/**
 * 芒狗DB 工具类
 */
public class MongodbUtil {

    // 省略.....



    // 查询
    public List<Document> query(String collectionName, String params) {
        return queryList(DEFAULT_DATABASE_NAME, collectionName, params);
    }


    private List<Document> queryList(String default_database_name, String collectionName, String params) {
        MongoDatabase mongoDatabase = getMondoDatabase(default_database_name);
        MongoCollection<Document> collection = mongoDatabase.getCollection(collectionName);
        Bson filter = Filters.and(Filters.eq("name", params));

        FindIterable<Document> list = collection.find(filter);


        MongoCursor<Document> iterator = list.iterator();
        List<Document> result = new ArrayList<>();
        while (iterator.hasNext()) {
            Document item = iterator.next();
            result.add(item);
        }
        return result;
    }




}


专注分享Java技术,跟我一起学习吧

长按识别二维码关注

MongoDB向量原生搜索实战:告别RAG工程割裂 向量数据库本质是为AI应用提供语义检索能力的基础组件,其核心原理在于将文本等非结构化数据映射到高维空间并通过近似最近邻(ANN)算法实现高效相似匹配。技术价值在于打破传统RAG架构中业务数据与向量数据的存储、查询与权限割裂,显著降低系统复杂度与数据不一致风险。典型应用场景涵盖智能客服、知识助手、工单推荐等需融合精确过滤与语义检索的业务系统。本文聚焦MongoDB 6.3+原生$vectorSearch能力与Voyage AI嵌入模型的深度协同,详解如何通过嵌套schema设计、路径级向量索引及混合查询语法, 阅读详情

相关推荐

NoSQL四大类型选型指南:键值/文档/宽列/图数据库实战解析

NoSQL并非关系型数据库的替代品,而是针对高并发、海量数据与业务快速迭代场景演化出的分布式数据存储范式。其核心在于数据模型决定能力边界:键值存储(如Redis)以极致读写性能支撑缓存与计数器;文档数据库(如MongoDB)用嵌套结构匹配业务实体,提升开发效率;宽列存储(如Cassandra)通过灵活列族实现百万级写入吞吐;图数据库(如Neo4j)则专精于多跳关系遍历,赋能推荐与风控。技术价值体现在可线性扩展、松耦合架构与场景化一致性权衡,广泛应用于电商秒杀、IoT时序写入、社交图谱与实时排行榜等工程场景。

weixin_30918633的博客 435

Django+Spark+MongoDB 构建高并发数据服务架构

在现代Web应用中,Django作为成熟Web框架擅长事务处理与快速响应,但面对海量日志分析、用户留存计算等OLAP场景时易出现性能瓶颈。其本质是将联机事务处理(OLTP)系统强行用于联机分析处理(OLAP),导致查询延迟高、数据库负载重。通过引入Apache Spark承担分布式批流一体计算,MongoDB支撑高吞吐、Schema灵活的原始数据存储,实现计算与服务解耦、异步执行与分层处理。该架构显著提升报表生成效率(如42分钟→92秒),支持按维度下钻与实时反馈,适用于SaaS平台、教育系统及IoT数据分

weixin_30443731的博客 387

连接器与MCP关系详解:用Workbuddy将设计稿一键生成App代码

在AI应用与自动化工作流日益普及的今天,如何高效接入外部系统成为开发者关注的重点。连接器作为平台预封装的API集成能力,以稳定、易用的“固定插座”形式满足常见系统对接需求;而MCP模型上下文协议则提供了开放的标准化接口,让AI能够自主发现并调用自定义工具和数据源。理解两者的分层关系,有助于构建既稳健又灵活的自动化流程。在实际工程中,连接器适合高频稳定的服务调用,MCP则擅长快速扩展和私有化数据接入。以Workbuddy为例,通过MCP读取设计稿结构化信息,可借助AI工作流自动生成前端页面代码,实现从设计到A

weixin_34072637的博客 344

MongoDB 开启日志

本文介绍了如何在 MongoDB 中启用日志,并讨论了不同的日志级别以及一些高级配置选项,希望能够帮助您更好地管理和维护 MongoDB 数据库。在 MongoDB 中,启用日志是管理和故障排除数据库的重要步骤之一。您可以根据实际情况修改数据库连接字符串、数据库名称和集合名称,以及添加其他的日志字段,以满足您的具体需求。请注意,对于每个选项,您可以在配置文件中添加多个配置块,每个块包含一个选项和其对应的配置值。除了基本的日志配置外,MongoDB 还提供了一些高级配置选项,以满足更复杂的日志记录需求。

牛肉胡辣汤 2527

Playwright MCP服务器依赖管理:轻量方案与复杂组件对比

在自动化测试和网页抓取领域,依赖管理是保障项目稳定运行和高效部署的核心环节。其原理在于通过精准控制项目所需的外部库和系统组件,避免因环境不一致导致的‘依赖地狱’问题。良好的依赖管理技术价值在于提升项目的可维护性、降低部署复杂度、优化资源占用,并减少长期技术债。在服务器端应用,特别是基于Playwright的MCP(Model Context Protocol)服务器场景中,依赖选择直接影响服务启动速度、运行稳定性和伸缩能力。本文聚焦于Playwright MCP服务器的环境依赖对比,深入探讨轻量依赖方案与高

diaoju3333的博客 411

构建基于Express和MongoDB的MVC应用程序实战

本文还有配套的精品资源,点击获取 简介:本项目是一个JavaScript Web开发示例,展示了如何采用Express框架和MongoDB数据库来构建一个遵循MVC设计模式的应用程序。项目名称中的"jag-express-mongo-mvc-v2"暗示了它的版本和可能的创建者。通过研究项目文件和结构,开发者可以掌握Express服务器端编程、MongoDB数据库交互以及MV...

weixin_32925455的博客 1098

mongodb的使用

mongodb 安装 1.安装:下载mogodb 添加环境变量步骤 我的电脑------>右击------>属性---->高级系统设置---->高级----->环境变量----->系统变量------>双击Path------>(window10系统:点击新建黏贴新的环境变量路径。win7系统:在原来的环境变量后加分号,黏贴新的环境变量路径)--...

田兴的博客 835

告别Keil4!手把手教你用Keil C51 V9.61编译51单片机代码(附最新激活方法)

本文详细介绍了Keil C51 V9.61在51单片机开发中的全栈升级指南,包括编译速度提升、调试器性能优化和现代开发支持等核心优势。通过智能安装方案、项目迁移实战和新特性深度应用,帮助开发者告别Keil4,大幅提升开发效率。附有最新激活方法和实用技巧,适用于嵌入式开发工程师。

weixin_26886855的博客 419

MongoDB 芒果数据库简介安装与基本操作(1)

NoSQL简介 SQL 就是 Structor Query Language结构化查询语言。 MySQL、Oracle、SQL Server都是SQL数据库。SQL缺点就是限制字段。SQL优点就是能够轻松执行复杂查找。涉及主从查找,SQL的主从查找非常强。 NoSQL(not only SQL), 非关系型数据库。 NoSQL中只有条目的概念,每个条目可以自由地设置字段。 ...

汇而不置的博客 3955

用户消费行为分析(MapReduce实现,Hive分析)

一、题目要求 数据来自CDNow网站的一份用户购买CD明细,本数据集共有 6 万条 左右数据,数据为 CDNow 网站 1997年1月至1998年6月的用户行为 数据

紫烟的博客 3013

C# Log4Net不输出日志的解决方法

log4net是一个流行的 .NET 日志框架,用于记录应用程序的日志信息。如果你在使用log4net。

精通搬砖,资深技术砖家,在软件开发,人工智能,设备开发等领域都有研究。商业合作&交流学习可私信联系。 1262

芒果数据库(MongoDB)学习记录(一)——安装

一、安装 MongoDB的官网是:http://www.mongodb.org/ 1.解压mongodb-win32-i386-2.4.8 ,创建路径D:\mongodb ,将解压后的Bin文件Copy to 此文件夹下 2.D:\mongodb 下建立Data文件夹 D:\mongodb\data\db 3.D:\mongodb 下建立Data文件夹 D:\mongodb

备忘录 3万+

华为OD机考双机位C卷 - 池化资源共享 (Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 池化资源共享 (OD上机考试双机位C卷)。提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。

算法大师! 1070

MangoDB的下载和安装

  前面已经简单介绍了MongoDB,今天我们就要正式学习他了,话不多说,咱先来安装。 1.现在MongoDB已经到了4.0版本,咱先去官网下载,MongoDB官网传送门,下载的版本信息如下,点击DownLoad就可以愉快下载啦。   2.下载到本地如下图   3.双击打开,接下来就是傻瓜式安装。 4.在这个位置要选择complete,在弹框里面选择存放数据和日志...

路漫漫其修远兮,吾将上下而求索。 5819

Windows部署小龙虾 OpenClaw 报错不断?参考这篇文章,轻松配置 OpenClaw 所需环境

想在Windows上部署OpenClaw却频频报错?🔧 本文详细梳理了OpenClaw部署必需环境的安装步骤和官方下载地址 📦,提供完整的验证清单和常见问题排查方法,帮你一次性搞定所有环境配置,顺利部署OpenClaw ✅

XiaoqiangClub的博客 361

成本中心(CO)和利润中心(PCA)是管理会计模块的核心组件

SAP中成本中心(CO)和利润中心(PCA)凭证处理存在差异:①外部交易(如费用支付、销售)会生成FI借贷凭证;②内部成本分摊和转移仅产生CO/PCA管理凭证,通过次级成本要素或利润中心转移科目记录,不涉及FI模块。核心区别在于是否涉及企业实际收支:实际收支触发FI凭证,内部核算仅生成管理会计凭证。系统通过这种机制实现财务会计与管理会计的集成与分离。

金牌架构师 1127

【MongoDB】MongDB入门篇(安装,连接,集成springboot增删改查)小白适用

1.1MongoDB简介 1.1.1什么是MongoDB MongoDB是一款开源的NoSQL数据库,用于存储Json数据,其功能强大,性能极高,社区活跃,问世短短几年时间就火遍全球. 好吃不过芒果,好用不过Mongo...   1.1.2MongoDB特性 MongoDB具有较高的可用性,较好的可扩展性,以二进制存储Json数据Bson,且相对关系型数据库比较灵活,存储文档,不需...

老汉健身的博客 383

【Bug已解决】Codex App returns 401 Missing bearer/basic authentication after login on multiple Windows la

原始报错:Codex App returns 401 Missing bearer/basic authentication after login on multiple Windows laptops场景:用户在 Windows 笔记本上登录应用成功了,但随后每个业务请求都返回 401,提示"Missing bearer/basic authentication"。登录态像是"假的"——明明登了,请求却没带任何认证信息。多台 Windows 设备都能复现。

一键难忘的博客 589

Ubuntu 16.04下用Transporter同步MongoDB到Elasticsearch实战

数据同步是现代搜索架构的核心环节,其本质是实现异构系统间的数据实时流转与语义对齐。基于变更数据捕获(CDC)原理,通过oplog tailing机制可实现低侵入、高时效的增量同步;而transform环节则赋予数据管道字段映射、类型转换、嵌套扁平化等关键建模能力。该技术方案显著提升全文检索、多维聚合与实时分析效能,广泛应用于电商商品搜索、用户行为分析、日志归集等场景。本文聚焦于在Ubuntu 16.04这一典型遗留环境中,利用Transporter完成MongoDB至Elasticsearch的稳定同步,并

hqmln的博客 97

android 蓝牙通讯demo

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

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

从“文档懂王”到“工程落地”:我用LangChain造了一个会写代码的Agent

这篇文章摘要了作者在使用LangChain、LangGraph和Deep Agents开发编码助手项目时的经验教训与解决方案: 理想与现实的落差:作者发现官方文档的示例与真实项目存在巨大差距,200万字学习笔记在实际开发中失效,遭遇了token消耗失控、路径解析错误和死循环等问题。 框架关系解析:文章拆解了langchain-core(接口标准)、langgraph(运行时引擎)、langchain(应用框架)和deepagents(工具链)之间的层级依赖关系,指出这是从抽象到具体的实现链条。 开发环境搭建

General_zy的博客 598

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

医疗健康应用后端架构实战:微服务、安全合规与FHIR标准

在构建现代医疗健康应用时,后端架构设计是确保系统稳定、可扩展和安全合规的基石。微服务架构通过将系统拆分为独立部署的领域服务(如用户管理、健康数据处理),实现了技术异构性、独立扩展和故障隔离,有效支撑了复杂多变的业务场景。其核心价值在于提升开发效率、系统可维护性以及应对高并发的能力,尤其适用于需要处理海量时序数据、集成多样设备、并满足严格法规(如HIPAA)的医疗健康平台。实践中,结合API网关统一入口和事件驱动架构,可以进一步解耦服务,实现异步、可靠的数据处理流程。本文以开源项目mediwise-healt

weixin_33736048的博客 358

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

让数据库 5 分钟变成可用 API?DreamFactory API 管理平台完整上手指南

深夜上线前,后端同事还在为第 27 张业务表手写增删改查接口,前端却已经在催联调地址;换个新项目,同样的 CRUD 代码又要重写一遍。这种"重复造轮子"的疲惫感,做开发的你一定不陌生。如果告诉你,有一个 **DreamFactory API 管理平台**,能在一顿饭的工夫把数据库变成一套带权限、带文档、带限流的 REST API,你会不会想立刻试试?这篇文章就带你从零跑通它的完整流程。 ## 别

gitblog_00191的博客 729

MediaCrawler:Python多平台爬虫框架部署与实战指南

网络爬虫作为数据采集的核心技术,通过模拟浏览器行为自动抓取网页信息,其原理基于HTTP协议与HTML解析。这项技术在数据驱动决策时代具有重要价值,广泛应用于市场分析、舆情监控和学术研究等领域。Python凭借丰富的库生态成为爬虫开发的首选,其中requests、BeautifulSoup等工具构成了技术基础。本文聚焦MediaCrawler这一多平台爬虫框架,详解其针对抖音、小红书等平台的**批量抓取**能力与**模块化设计**,涵盖环境配置、任务调度到反爬策略的完整工程实践方案,为需要跨平台数据采集的开发

abcyan1235的博客 471

MediaCrawler:构建稳定可扩展的社交媒体数据采集系统

网络爬虫是自动化获取网页数据的关键技术,其核心原理是通过模拟浏览器请求与解析HTML/JSON响应来提取结构化信息。在数据驱动决策的时代,高效、稳定的数据采集技术对于市场分析、舆情监控和学术研究具有重要价值。面对反爬机制、动态加载等工程挑战,一个工程化的采集框架能显著提升开发效率与系统鲁棒性。MediaCrawler作为一个开源的多平台社交媒体数据采集框架,通过模块化设计将复杂的爬虫任务抽象为可配置的标准化流程,支持抖音、小红书等主流平台,并内置了对抗反爬的策略。该框架适用于需要持续、规模化获取社交媒体数据

weixin_34348805的博客 427

博客介绍——warrent(博文末尾有彩蛋)

这个博客是一个工作不到两年的运维所写,写的是一些工作上遇见的问题以及在之前入门时学习的一些技术,博文都是参考之前学习时的教材以及网络上的技术文档,整理之后写下来的,若您有需要,参考了我的博文,那先谢谢您,因为这是对我博文的一个肯定。 我关注并且会写下来的技术:1)Linux方面包括(咱本身就是走Linux运维方面): shell、LAMP/LNMP架构的搭建及性能调优、系统安全、防火墙配置; ...

cheng198956的专栏 1412
上一篇: 我造了一个轮子去写系统日志
下一篇: 从面向过程出发到函数式编程(上篇)
新时代Java农民工
博客等级 码龄7年 16粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值