mongodb java驱动关键对象转化

MongoDB显式创建集合:构建生产级数据契约的三大防线 在NoSQL数据库中,集合创建并非简单初始化动作,而是数据治理的起点。MongoDB的隐式建集合机制虽带来灵活性,却将schema约束、存储控制与性能保障等责任转移至应用层,极易引发字段缺失、类型错乱、查询性能骤降等线上故障。通过显式调用db.createCollection(),可前置定义JSON Schema验证规则、capped存储边界和TTL索引策略,实现结构可信度、存储确定性与性能可预测性三重保障。该实践广泛适用于电商订单、IoT日志、SaaS用户行为等高并发、多系统协同场景,是保障MongoDB 阅读详情
目的

    了解mongodb java驱动如何和mongod作数据交互,同时了解object json bson的数据格式解析过程

概述

    mongodb采用的java转json是使用自定义的方法:com.mongodb.util.JSON类来处理;

    转json:public static String serialize(Object o)

    反转json:public static Object parse(String s)

    那就看看这两个方法的具体实现

java object to json

        mongodb java客户端的对象主要是DBObject及其之类,采用递归方式处理嵌套关系,我们也可以从中学习到如何将一个对象转为string类型的其他格式。


类型转化方式
Null类型:字符串 null
Boolean类型:对应的值true
False
Number类型:
Byte Short Integer Long Float Double
BigInteger BigDecimal AutomicInteger
AutomicLong
返回对应数值的字符串
String类型:
这里的string类型主要是DBObject的key,
对于mongodb,DBObject的key为{“key”,...}这种格式,
因此要对特殊字符作处理,目前处理如下
\ -> \\ “ -> \* \n -> \\n \r -> \\r
\t -> \\t \b -> \\b
ASCII为32之前的字符都忽略,这些是控制字符
举例:
abc -> “abc”
“abc -> “\”abc”
a\b”c -> “a\\b\”c”
ObjectId类型:
对于ObjectId类型,先转成BasicDBObject方式再进行解析
{“$oid”, objectId.toString()}
如objectId为:789dsab4adafasdfsdfasdf873294
{“$oid” : 789dsab4adafasdfsdfasdf873294}
Iterable类型:
对于迭代起类型,递归调用每个类型进行处理
字符迭代器:[abc, bcd, cde, def ]
DBObject迭代器:[{“abc”, value}, {“bcd”, value }, {“cde”, def} ]
DBObject类型:
根据简单类型递归处理
转成形如:
{key:{key,value}, key:value}
Map类型:
这个基本不用想了,因为DBObject本身就继承自map,
所以map的解析和DBObject一致
同上
Date类型:{“$date”, "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"}
DBRefBase类型:
转成DBObject
{”$ref”, ref.getRef(), “$id”, ref.getId()}
byte[]或者Binary:<Binary Data>
数组类型:[“key”:”value”, “key”:”value”]
Pattern类型:
转DBObject
{"$regex": o.toString(), $options: Bytes.regexFlags(((Pattern) o).flags())}
BSONTimestamp类型:
转DBObject
{“$ts”:t.getTime(), “$inc”:t.getInc()}
UUID类型:
转DBObject
{"$uuid":uuid.toString()}
CodeWScope类型:
转DBObject
{"$code":c.getCode(), "$scope": c.getScope()}
Code类型:
转DBObject
{"$code":c.getCode()}
MinKey类型:
转DBObject
{$minKey":1}
MaxKey类型:
转DBObject
{"$maxKey":1}

json to java object

处理的内容比较明确:

null

NaN

true

false

字符串类型 \' \"

数字类型 0 - 9 + -

数组类型

对象

以上讨论针对的是java对象转成json对象,接下去讨论json对象转化为bson对象。

这方面的内容bson连接讨论的比较详细,url为:http://bsonspec.org/#/specification

不过看了这个文档1个小时后终于把这个文档的两个事例看懂,因此有必要在这里说明下,以便其他观看文档的人更容易理解

json to bson

还是现来看一下文档中提到的两个例子。

先看第一个

{"hello": "world"}

按格式规范转应该是如下内容:

int32                                 -- 指定文档大小,包括结尾的\x00
    \x02 (byte*) \x00                 -- 一个字符标明value的类型,接着是key字符串的byte值,最后以\x00结束
    int32 (byte*) \x00                -- int32是value btye大小加上\x00的长度,接着是value的具体值,最后以\x00结尾
\x00                                  -- \x00结尾

对应的具体形式:

\x16\x00\x00\x00                      -- 本文档总字节数为22
    \x02 hello \x00                   -- value类型为string类型 key的值为hello     
    \x06\x00\x00\x00 world \x00       -- value字节数为6(包括结尾的\x00) value值为world
\x00                                  -- 文档结束
这样一划分,结构就清晰多了

以上简单格式解析基本能对应上,再来看第二个例子:

{"BSON": ["awesome", 5.05, 1986]}

还是先转成通用格式,这里说明下array在bson中是一个内嵌文档,格式如下{0:array[0], 1:array[1], 2:array[2]}:

int32                               -- 文档大小
    \x04 (byte*) \x00               -- value类型 key值 结束符
    int32                           -- 内嵌文档大小
        \x02 (byte*) \x00           -- value类型 key值 结束符
        int32 (byte*) \x00          -- string大小 value值 结束符
        \x01 (byte*) \x00           -- value类型 key值 结束符
        double                      -- value值
        \x10 (byte*) \x00           -- value类型 key值 结束符
        int32                       -- value值
    \x00
\x00


对应的具体形式:

"1\x00\x00\x00                        -- 文档大小为49,这里的1是ascii值
    \x04 BSON \x00                    -- value为array类型,key值为bson
    &\x00\x00\x00                     -- 内嵌文档大小为38
        \x02 0 \x00                   -- value值的类型为string, key的值为0
        \x08\x00\x00\x00 awesome \x00 -- string大小为8个字节, 值为awesome
        \x01 1 \x00                   -- value为double类型,key值为1
        333333\x14@                   -- 5.05对应的byte[]值,大小为8B,先调用Double.doubleToRawLongBits( x ),再以long方式写入。
        \x10 2 \x00                   -- value为32位整型,key值为2
        \xc2\x07\x00\x00              -- 4B的值,echo $((12*16 + 2 + 7*16*16)),低位在前,高位在后
    \x00
\x00"

以上两个列子基本上能了解如何把一个json对象转成bson对象了,这样在wireshark协议时基本上也没什么问题。

bson to json

1.如何判断key,value编码方式:

    每字节读取,分析字节是否为[0,127];是:表示为纯英文;如果有一个字符不为这个范围内的字符,表示包含其他字符方式,采用utf-8方式解码

2.

后续继续更新上去,可直接看mongodb源代码

https://github.com/michel-kraemer/bson4jackson




MongoDB向量搜索实战:从零搭建语义推荐系统 向量搜索是现代语义检索的核心技术,它将文本、图像等非结构化数据映射为高维空间中的数值向量,通过计算向量间相似度实现语义匹配。其底层依赖近似最近邻(ANN)算法与高效索引结构,技术价值在于绕过关键词匹配局限,直接理解用户意图。典型应用场景包括电商商品推荐、智能客服问答、多模态内容检索及个性化文档搜索。MongoDB原生支持向量搜索,凭借聚合管道融合能力、原子性数据一致性与Atlas云服务的自动化索引管理,显著降低工程落地门槛。本文聚焦真实业务场景,详解embedding模型选型、float32精度控制、cos 阅读详情

相关推荐

Django+Spark+MongoDB协同架构:构建高吞吐Web分析系统

在现代Web应用中,Django擅长事务处理与用户交互,但面对百万级日志聚合、多维留存分析等典型OLAP场景时,其ORM和单机计算能力迅速成为瓶颈。Apache Spark作为分布式计算引擎,天然适配大规模数据清洗、窗口计算与模型训练;MongoDB凭借灵活文档模型、原生聚合管道及Change Streams能力,成为连接Django(操作层)与Spark(计算层)的理想枢纽——它既规避了关系型数据库的JOIN开销与锁表风险,又提供了比纯对象存储更强的可查询性与运维友好性。该组合特别适用于日增300万+文档

weixin_34111790的博客 410

对mongodb document 转换bytes类java代码的实现

文章目录 前言 一、为什么要将Document转换为bytes 二、工具类实现 1.引入库 2document系列化bytes 3.bytes反序列化document 4开发环境 总结 前言 最近在设计一个针对mongodb数据操作的客户端,以配合自己设计的DB接点一同使用。 一、为什么要将Document转换为bytes? 在实际开发中,开发一个针对mongodb的一个客户端,该客户端与DB接点进程(自己开发的进程)进行通...

lejian的专栏 3015

MongoDB存储机器学习模型:元数据管理与GridFS实战

机器学习模型管理已从简单的文件存储演进为结构化资产治理问题。核心在于将模型二进制与其丰富元数据(算法类型、输入输出规范、指标、版本、部署上下文)统一建模并支持高维查询。MongoDB凭借原生JSON文档模型、GridFS大文件支持及聚合查询能力,成为兼顾元数据灵活性与二进制可管理性的轻量级中枢方案——它不替代专用模型仓库,而是补足MLflow或MinIO在‘可查询性’和‘端到端一致性’上的短板。适用于需支撑A/B测试、多环境部署、审计追溯及自动化运维的MLOps中台场景,尤其适合已面临模型版本混乱、元数据散

weixin_34234829的博客 425

java bson json 转换_json如何转换为bson

标签:function TMyMongoDbClass.JsonToBson(code:string;obj: tjsonvalue): tbson;varb:tbson;jv:tjsonvalue;buffer:tbsonbuffer;function BL_json(curbuf:tbsonbuffer;pname:string;tobj:tjsonvalue):tbson;vari:inte...

weixin_35664484的博客 959

MongoDB Docker 容器化生产实践:认证、持久化与安全加固

MongoDB 是一款面向文档的 NoSQL 数据库,Docker 则是实现环境标准化与部署自动化的主流容器技术。将 MongoDB 运行在 Docker 中,核心在于解决开发与生产环境不一致、权限失控、数据丢失及网络暴露等工程痛点。其原理依托镜像版本锁定、非 root 用户运行、TLS 加密通信与声明式卷挂载等机制,技术价值体现在可复现部署、最小权限安全模型与基础设施即代码(IaC)能力。典型应用场景包括微服务后端数据库、CI/CD 演示环境快速构建、以及金融类 SaaS 系统的测试与小规模生产环境。本文

weixin_30892889的博客 675

MongoDB五维健康检查:连接、复制、缓存、查询与容量实战指南

MongoDB健康检查是保障数据库高可用与稳定性的基础工程实践,其核心在于将抽象的‘健康’转化为可量化、可告警、可追溯的具体指标。基于WiredTiger存储引擎原理与副本集同步机制,需系统评估连接可用性、复制滞后、缓存使用率、慢查询执行效率及磁盘容量余量五大维度。其中,WiredTiger缓存使用率超92%预示page fault激增,副本集secondary节点optimeDate滞后超5秒则暴露同步风险——这些阈值源于线上压测与故障复盘,而非经验猜测。该方法广泛适用于云环境巡检、CI/CD上线前验证及

banshen0201的博客 400

java生成mongo的ObjectId,用于清理主键为ObjectId的mongo表

package com.comisys.lanxin.open.util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class mongoCleanUtil { /** * 1、获取到ObjectId * 2...

dyq51的博客 2498

Ubuntu 18.04 MongoDB安全加固:从默认裸奔到生产级认证

MongoDB作为主流NoSQL数据库,其身份认证(Authentication)机制是保障数据安全的核心基础。在Ubuntu 18.04等Debian系系统中,APT安装的MongoDB默认关闭authorization,导致服务暴露于未授权访问风险——这并非漏洞,而是历史兼容性设计所致。理解其原理(如security.authorization开关、keyFile强制安全模式、bindIp网络隔离)可避免常见报错如authentication failed和password authentication

weixin_34248487的博客 554

mongodb bson java,使用MongoDB驱动程序Java API进行BSON到JSON转换

我使用MongoDB驱动程序Java API将BSON转换为JSON.我有这样的测试代码.String input = "{ \"timestamp\" : 1486064586641 }";org.bson.Document doc = org.bson.Document.parse(input);System.out.println("input = " + input);System.ou...

weixin_39939510的博客 475

【完美解决】Anaconda3安装后缺失大量文件,没有scripts、Library等目录

Anaconda3是官网下载的:https://www.anaconda.com/distribution/#download-section 我选择的是64位python 3.7的版本。 问题出现及现象: 我自己选择了一个D盘的目录D:\Tools\Anaconda3进行安装,装完后发现conda list命令无法执行,首先都到的是配置环境变量,然后发现安装目录下缺失大量文件(如下图)...

android之行 3万+

TensorRT-LLM环境配置避坑指南:从安装到实战

本文是一份详尽的TensorRT-LLM环境配置避坑指南。文章重点解析了从Python、CUDA、PyTorch版本选择,到解决mpi4py安装这一核心难题的完整流程,并提供了经过验证的稳定版本组合与实战排错方案,帮助开发者高效部署大语言模型推理优化环境。

a0b1c2d3的专栏 983

MongoDB Compass完全指南:从安装到精通的5个关键步骤

数据库管理是否还在依赖命令行输入?面对复杂的JSON结构是否感到无从下手?MongoDB Compass作为官方推出的数据库可视化工具,让这些问题迎刃而解。本文将通过5个关键步骤,带您从环境搭建到高级应用,全面掌握这款图形化管理工具的使用方法,让数据库操作变得直观高效。 ## 一、价值定位:为什么选择MongoDB Compass? 如何让数据库操作像拖放文件一样简单?MongoDB Comp

gitblog_00213的博客 270

避坑指南:Unity新版InputSystem在移动端的5个常见问题及解决方案

本文针对Unity新版InputSystem在移动端开发中的常见问题,提供了5个关键解决方案,包括虚拟摇杆灵敏度调节、多点触控冲突处理、按钮反馈延迟优化、手势识别与陀螺仪数据融合以及Android/iOS平台差异处理。这些实战经验帮助开发者高效解决触控适配难题,提升移动游戏体验。

soda5的博客 404

Mongdb学习(五)MongoDB支持(MongoDB支持)(从MongoDB官网谷歌译文)

4. MongoDB支持 MongoDB支持包含以下总结的各种功能。 Spring配置支持使用基于Java的@Configuration类或Mongo驱动程序实例和副本集的XML名称空间 MongoTemplate帮助类,提高生产力执行常见的Mongo操作。包括文档和POJO之间的集成对象映射。 异常转换成Spring的可移植数据访问异常层次结构

千年似流水的博客 1822

MicroPython ubluetooth 库详细介绍

MicroPython的ubluetooth库为蓝牙通信提供了强大的支持,使得开发者能够在MicroPython环境下轻松实现蓝牙设备之间的通信。其中ubluetooth库为MicroPython提供了强大的蓝牙通信功能,使得开发者能够轻松地在各种支持MicroPython的硬件平台上实现蓝牙设备之间的通信。它提供了一系列的函数和类,用于实现蓝牙设备的扫描、连接、数据传输等功能。- 上述代码中,首先创建了一个蓝牙服务和一个特征,然后可以通过read和write函数读取和写入特征值。# 处理连接成功事件。

m0_46311182的博客 1761

统一大型语言模型和知识图谱:路线图

大型语言模型(LLM),如ChatGPT和GPT4,由于其涌现能力和泛化性,正在自然语言处理和人工智能领域掀起新的浪潮。然而,LLM是黑箱模型,通常无法捕捉和获取事实知识。相反,知识图谱(KGs),例如维基百科和华普,是显式存储丰富事实知识的结构化知识模型。KGs可以通过为推理和可解释性提供外部知识来增强LLM。同时,KGs很难从本质上构建和演化,这对KGs中现有的生成新事实和表示未知知识的方法提出了挑战。因此,将LLM和KGs统一在一起并同时利用它们的优势是相辅相成的。

qq_32907491的博客 2842

【亲测免费】 SQL转MongoDB查询转换器安装与配置完全指南

SQL转MongoDB查询转换器安装与配置完全指南 项目基础介绍及主要编程语言 SQL转MongoDB查询转换器 是一个开源工具,由 Vincent Russell 开发并托管在 GitHub 上(访问项目)。它旨在帮助开发者轻松地将SQL查询转换成MongoDB的查询语句,从而简化从关系型数据库到NoSQL数据库的迁移过程或进行跨数据库查询转换。此项目主要使用 Java 作为开发语言,并且要求运...

gitblog_09224的博客 818

DeepSeek揭秘:构建高效反洗钱智能监控系统的全流程与代码实例

在金融领域,反洗钱(AML)是一项至关重要的任务。随着金融交易的复杂性和规模不断增长,传统的手工监控方法已无法满足现代金融系统的需求。因此,开发一个智能监控系统来自动识别和报告可疑交易变得尤为重要。本文将详细介绍如何使用DeepSeek技术构建一个高效的反洗钱智能监控系统,并提供相关的代码实例。

理论都是虚的,代码才是王道。 884

mongodb数据库显示obj_明了 | MongoDB 外键的基本使用

小小继续进行学习,这次学习的内容是MongoDB外键的基本使用。表示表关系的方法在传统的关系型数据库当中,表示表关系,数据是通过索引来完善。而在MongoDB中,表示表关系,使用的是嵌套,即,一个文档嵌套一个文档的方法,作为MongoDB的两个文档的关联,以及使用,reference link作为文档和文档之间的关联。文档嵌套使用可视化的这里使用可视化的编辑器作为文档嵌套输入以下的文档对象{ ...

weixin_39556811的博客 265

【原创】关于西门子S120 的电气图纸设计

我们首先要了解一下模块的基本信息:SINAMICS 功率模块 PM240-2 三相交流380-480V+10/-10% 47-63Hz;至此,我们选择的驱动系统配置的资料都已经查找完毕,接下来就是根据每个部件的功能接口和我们需要实现的功能画出接线连接图,这样关于伺服电机控制,硬件部分设计就完成了。2)FSA - FSC 型功率模块 PM240-2 的屏蔽连接板外形尺寸图,所有数据以毫米(英寸)为单位。1)FSA 型功率模块 PM240-2 的外形尺寸图,所有数据以毫米(英寸)为单位。

Qinmingyue13的博客 2638

华为OD机试真题 新系统【查找能被整除的最大整数】

华为OD新系统机试真题【查找能被整除的最大整数】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【查找能被整除的最大整数】

qq_45776114的博客 671

金仓数据库 MongoDB 兼容:多模融合下的架构之道与实战体验

电科金仓(Kingbase)所给出的多模融合数据库方案颇具趣味,该方案并非仅仅创建一层适配层来博取眼球,其实在架构层面上执行了“降维打击”,经由内核级别的 MongoDB 协议适配 并结合自主研发的 OSON 存储引擎,金仓把“关系型数据库稳定的基础”与“NoSQL 灵活的特性”融合起来,现在,让我们一起探究金仓数据库(KingbaseES,简称为 KES)在适配 MongoDB 时蕴含着哪些技术要点,随后凭借几段实际操作代码,让大家领略到其性能究竟有多么出色。

倔强的石头的博客 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

MongoDB到ClickHouse实时同步实战:基于Flink CDC的配置驱动方案

在实时数据分析场景中,异构数据源的同步与集成是构建实时数仓的核心挑战。MongoDB作为文档型数据库擅长在线事务处理,但在多集合关联聚合分析时性能受限;ClickHouse凭借列式存储与向量化执行,能够高效支撑海量数据的即时查询。数据同步技术从离线批量导出演进到基于日志的实时捕获,Flink CDC作为流处理框架与CDC连接器的结合,实现了全量快照加增量变更的自动化管道,并借助checkpoint机制保障数据一致性。该方案适用于订单、用户、支付等业务数据从MongoDB实时同步至ClickHouse的分析场

weixin_33158887的博客 115

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【六】源码Java,Python,SpringBoot,SpringCloud,Redis,MySQL,Mongodb,Javascript,Echarts,Spark,Hbase区块链等框架整合技术

项目通过深度整合Java、Python、SpringBoot、SpringCloud、Redis、MySQL、MongoDB、JavaScript、ECharts、Spark、HBase、区块链等前沿技术,构建了一个集高并发处理、多模态数据管理、分布式计算和智能可视化于一体的大型应用系统。这种前后端分离的架构不仅提高了开发效率,更为终端用户提供了丰富的数据交互体验。通过智能合约和分布式账本技术,平台在供应链金融、产品溯源、电子存证等场景中实现了数据的不可篡改性和交易的可追溯性,增强了系统的公信力。

qq_2934918046的博客 479
上一篇: java使用mongodb问题集
下一篇: Java 平台中的增补字符
「已注销」
博客等级 码龄20年 47粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值