Mongo操作手册

Mongo数据类型

在Mongodb中,可以使用数字代码和别名作为过滤条件查询文档。在聚合操作中,可以获取字段类型的别名。或者根据返回的字段类型实现不同的逻辑。

//使用字符串"array"和数字类型4查询字段类型是数组的数据
db.collection.find({<field_name>: {$type: "array"}})
db.collection.find({<field_name>: {$type: 4}})

db.collection.find({ "last_update_time": { $type: 18 } }).limit(1);

Mongo 命令行操作:

# 进入
mongo
# 切库
use msip
# 登录
db.auth('username','password');
# 展示库
show dbs
# 展示表
show collections;
# 删除
db.集合名.drop()
# 退出
exit
 
# 插入文档
db.集合名.insert({键: 值, 键: 值, ...})
# 查询文档
db.集合名.find({查询条件})
# 更新文档
db.集合名.update({查询条件}, {$set: {更新内容}})
# 删除文档
db.集合名.remove({查询条件})
# 更新多条数据,开发环境自己修改数据类型使用;
# 0 默认插入是double,必须使用 NumberInt,时间属性可以使用new Date(),也可以使用时间戳 $currentDate,也可以使用NumberLong
db.bindboxes.updateMany(
  {},
    {
        $set: {
            type: NumberInt(0),
            last_update_time: NumberLong('1732259866059')
        }
    },
    { upsert: true }
);
 
# mongoDB添加用户密码
db.createUser({user:"admin",pwd:"1qaz!QAZ",roles:["root"]})
db.createUser({user:"douzi",pwd:"123456",roles:["readWriteAnyDatabase"]})
db.createUser({user:"douzi1",pwd:"123456",roles:["readWrite"]})
db.dropUser("douzi1")
 
mongodump --host=MongoDB服务器地址:端口号 --username=用户名 --password=密码 --db=数据库名称 --out=导出路径
mongodump --host=MongoDB服务器地址:端口号 --username=用户名 --password=密码 --db=数据库名称 --collection=集合名称 --out=导出路径
 
mongorestore -db 恢复后的数据库名称 待恢复数据的目录路径

mongo url解析

# 单机连接url
mongodb://username:password@10.186.201.173:27017/认证db
# 集群连接url
mongo_url: "mongodb://username:password@douzi1:27017,douzi2:27017,douzi3:27017/认证db?replicaSet=yulancard&readPreference=secondaryPreferred&authSource=msip"

1.readPreference: secondaryPreferred #主要控制客户端driver从副本集(Replica Set)读数据的时候如何路由

  •  primary:只主(默认模式)。只从primary节点读数据。
  •  primaryPreferred:先主后从。优先从primary读取,primary不可用时从secondary读。
  •  secondary:只从。只从副本集中secondary节点读数据。
  •  secondaryPreferred:先从后主。优先从secondary读取,如果secondary不可用时就从primary读。
  •  nearest:就近。根据网络距离,就近读取,根据客户端与服务端的PingTime是实现。

2.replicaSet: yulancard  #指定提供的连接字符串包括多个主机。如果指定,驱动程序将尝试查找该集合的所有成员

Java 连接 mongodb:

介绍一个新东西,mongo-plus:前言 | MongoPlus

Mongo-Plus(简称 MP)是一个 MongoDB 的操作工具,可和现有mongoDB框架结合使用,为简化开发、提高效率而生。

特性

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 强大的 CRUD 操作:通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
  • 支持主键自动生成:支持多达 5 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
  • 支持自定义全局通用操作:支持全局通用方法注入
  • 支持无实体类情况下的操作
  • 支持动态数据源
  • 支持逻辑删除、防止全集合更新和删除、自动填充等等功能

项目maven引用

<dependency>
	<groupId>com.gitee.anwena</groupId>
	<artifactId>mongo-plus-boot-starter</artifactId>
	<version>2.1.4</version>
</dependency>

代码结构:

配置项,包括多数据源

通过本机一个库不同的集合模拟,如果生产环境多组集群数据源;还需要增加:

mongo_url: "mongodb://username:password@douzi1:27017,douzi2:27017,douzi3:27017/认证db?replicaSet=yulancard&readPreference=secondaryPreferred&authSource=msip"

replicaSet、readPreference配置,详见 配置文件 | MongoPlus

# DataSource Config
mongo-plus:
  group: 3 #代表有几组mongodb,最多现网4组,业务代码使用
  data:
    mongodb:
      host: 127.0.0.1   #ip,集群通过英文逗号分隔
      port: 27017   #端口,集群通过英文逗号分隔
      database: testDb    #数据库名
      username:     #用户名,没有可不填(若账号中出现@,!等等符号,不需要再进行转码!!!)
      password:     #密码,同上(若密码中出现@,!等等符号,不需要再进行转码!!!)
      authenticationDatabase: testDb     #验证数据库,非常重要,不配默认连接admin库
      connectTimeoutMS: 50000   #在超时之前等待连接打开的最长时间(以毫秒为单位)
      slave-data-source:
        - slave-name: slave1  # 数据源名称,注解@MongoDs使用
          host: 127.0.0.1  #ip,集群通过英文逗号分隔
          port: 27017      #集群通过英文逗号分隔
          database: testDb1
          connectTimeoutMS: 50000
          username:     #用户名,没有可不填(若账号中出现@,!等等符号,不需要再进行转码!!!)
          password:     #密码,同上(若密码中出现@,!等等符号,不需要再进行转码!!!)
          authenticationDatabase: testDb     #验证数据库,非常重要,不配默认连接admin库
        - slave-name: slave2  # 数据源名称 注解@MongoDs使用
          host: 127.0.0.1  #ip,集群通过英文逗号分隔
          port: 27017      #集群通过英文逗号分隔
          database: testDb2
          connectTimeoutMS: 50000
          username:     #用户名,没有可不填(若账号中出现@,!等等符号,不需要再进行转码!!!)
          password:     #密码,同上(若密码中出现@,!等等符号,不需要再进行转码!!!)
          authenticationDatabase: testDb     #验证数据库,非常重要,不配默认连接admin库
  log: true
  format: true
  pretty: true
  configuration:
    collection:
      block-attack-inner: true #开启防止整个集合更新和删除(防止全表更新删除)
      autoConvertObjectId: true #自动转换ObjectId配置

通过注解执行不同的数据源取数据

其他代码:

1.根据数据库结构构建domain

2.直接创建service类,并且啥都不用写,框架已经封装所有操作方法

3.业务使用,类似mybatis-plus语法

注意:对于异常数据处理

有人在插入数据的时候,根本不注意数据类型。

例如会把 new Date().getTime() long值 存成 double;

对于现实遇到此情况,代码也是可以处理的:

Long dateTime = new Date().getTime();
Double dataTimeD = dateTime.doubleValue();

// 然后在传入我们的查询条件中,即可查询:
lqc.lt(dataTimeD != null, BindBoxes::getLastUpdateTime, dataTimeD);

// 如果要格式化此属性:
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
if (bb.getLastUpdateTime() != null) {
	String updateTime = dateFormat.format(bb.getLastUpdateTime());
	System.out.println(updateTime);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/926348.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HBU深度学习作业9

1. 实现SRN &#xff08;1&#xff09;使用Numpy实现SRN import numpy as npinputs np.array([[1., 1.],[1., 1.],[2., 2.]]) # 初始化输入序列 print(inputs is , inputs)state_t np.zeros(2, ) # 初始化存储器 print(state_t is , state_t)w1, w2, w3, w4, w5, w6, w7, …

智能堆叠,集群和IRF

堆叠和IRF其实可以近似看成同一种技术&#xff0c;只是华三叫IRF&#xff0c;华为叫智能堆叠 智能堆叠&#xff08;iStack&#xff09;&#xff1a;支持堆叠特性的交换机通过堆叠线缆连接在一起&#xff0c;从逻辑上变成一台交换设备&#xff0c;作为一个整体参与数据转发&…

三维渲染中顺序无关的半透明混合(OIT)(二——Stencil Route)

1、A-Buffer算法。 在谈到Stencil Route之前&#xff0c;需要先讨论A-Buffer算法。A-Buffer是一种图形学&#xff08;渲染方向&#xff09;上的用于可见面分析(Visble Surface Detection)的技术&#xff0c;是Z-Buffer的衍生方法。 Z-Buffer是用于剔除 不透明 物体的算法。假…

transformers bert-base-uncased情感分析

一、使用huggingface中的预训练模型&#xff0c;先要安装transformers、torch和SentencePiece pip install transformers pip install torch pip install SentencePiece 手动下载&#xff1a;https://huggingface.co/google-bert/bert-base-uncased/tree/main 添加以目录&…

Android开发仿qq详情下拉头像变大

Android开发仿qq详情下拉头像变大 个人详情界面&#xff0c;很多都有下拉头像变大的效果&#xff0c;其实我觉得这效果还不如点击头像看大图呢 一、思路&#xff1a; 自定义ScrollView 二、效果图&#xff1a; 看视频更直观点&#xff1a; Android开发教程案例分享-仿qq详情…

洛谷 P1157 组合的输出 C语言

题目&#xff1a;https://www.luogu.com.cn/problem/P1157#submit 题目描述 排列与组合是常用的数学方法&#xff0c;其中组合就是从 n 个元素中抽出 rr 个元素&#xff08;不分顺序且 r≤nr≤n&#xff09;&#xff0c;我们可以简单地将 n 个元素理解为自然数 1,2,…,n从中任…

数据结构3.链表

目录 1.链表的概念及结构 2.链表的分类 1.单向或者双向 2.带头或者不带头 3.循环或者非循环 3.链表的实现 1.无头单向非循环链表 2.双向带头循环链表 4.顺序表和链表的区别 1.链表的概念及结构 概念&#xff1a;链表是一种物理存储结构上非连续、非顺序的存储结构&…

A054-基于Spring Boot的青年公寓服务平台

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600…

paimon的四种changelog模式(2)-none模式

# 请先了解input模式 环境创建 CREATE CATALOG fs_catalog WITH (typepaimon,warehousefile:/data/soft/paimon/catalog );USE CATALOG fs_catalog;drop table if exists t_changelog_none ;CREATE TABLE t_changelog_none (age BIGINT,money BIGINT,hh STRING,PRIMARY KEY (h…

【CSS in Depth 2 精译_064】10.3 CSS 中的容器查询相对单位 + 10.4 CSS 容器样式查询 + 10.5 本章小结

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 【第十章 CSS 容器查询】 ✔️ 10.1 容器查询的一个简单示例 10.1.1 容器尺寸查询的用法 10.2 深入理解容器 10.2.1 容器的类型10.2.2 容器的名称10.2.3 容器与模块化 CSS 10.3 与容器相关的单位 ✔…

CSS笔记(二)类名复用

这里我通过两张不同位置的卡片来实现效果 代码 <!DOCTYPE html> <html><head><style>/*设置画布*/body{/* 方便排列与对齐*/display: flex; /*画布布满整个窗口*/height: 100vh;/*水平居中*/justify-content: center;/*垂直居中*/align-items: cente…

常用函数的使用错题汇总

#include <iostream> #include <fstream> #include <string>int main() {std::ifstream fin("example.txt"); // 创建 ifstream 对象并打开文件// 检查文件是否成功打开if (!fin) {std::cerr << "Error opening file!" << s…

【树莓派5】移动热点获取树莓派IP并初次登录SSH

本篇文章包含的内容 1 打开系统热点2 烧录系统设置3 配置 MobaXterm4 初次启动树莓派配置选项4.1 换源4.2 更新软件包4.3 安装vim编辑器4.4 更改CPU FAN温度转速 Windows版本&#xff1a;Windows11 24H2树莓派&#xff1a;树莓派5&#xff0c;Raspberry Pi 5SSH软件&#xff1a…

分布式调用 - 服务间的远程调用RPC

文章目录 导图PreRPC 概述RPC 调用过程RPC 动态代理1. 接口定义 (SeverProvider)2. 实现类 (ServerProviderImpl)3. 动态代理类 (DynamicProxy)4. 客户端 (Client)5. 代码工作流程6. 总结和注意点7. 结果输出8. 小结 RPC 序列化1. JSON (JavaScript Object Notation)2. Hessian…

基于Matlab湍流对高斯光束传播影响的模拟与评估

随着光学通信与激光技术的不断发展&#xff0c;湍流对光束传播的影响已成为研究中的重要课题。特别是在大气湍流条件下&#xff0c;光束的传播会受到相位扰动的影响&#xff0c;从而导致光束质量的恶化、能量损失及光束中心的偏移等问题。本文基于高斯光束模型&#xff0c;提出…

19. C++STL 5(深入理解vector,vector的模拟实现,二维动态数组)

⭐本篇重点&#xff1a;vector深入理解和模拟实现 ⭐本篇代码&#xff1a;c学习/09.vector-2 橘子真甜/c-learning-of-yzc - 码云 - 开源中国 (gitee.com) 目录 一. 深入理解vector 二. 使用模板模拟实现vector &#xff08;包含迭代器&#xff09; 2.1 模拟vector类的成员…

PDF文件怎么加密?如何给pdf文档加密码保护?(2025全新科普)

PDF文件因其跨平台兼容性和格式稳定性&#xff0c;成为广泛使用的文档格式。 然而&#xff0c;随着信息泄露风险的增加&#xff0c;如何保护PDF文件的安全成为了一个重要问题。 本文将介绍几种2025年最新的PDF文件加密方法&#xff0c;帮助用户为PDF文档添加密码保护。 一、使…

服务器端使用国密证书

服务器端国密证书nignx代理配置 1.资料准备 从gmssl实验室下载已经编译完成的gmssl包 地址&#xff1a;https://www.gmssl.cn/gmssl/index.jsp 下载位置&#xff1a; 保证openssl支持国密算法&#xff0c;ssl 1.1.1 已支持&#xff0c;检查一下最佳 准备一个支持国密的ngin…

第04章_运算符(基础)

1. 算术运算符 算术运算符主要用于数学运算&#xff0c;其可以连接运算符前后的两个数值或表达式&#xff0c;对数值或表达式进行加&#xff08;&#xff09;、减&#xff08;-&#xff09;、乘&#xff08;*&#xff09;、除&#xff08;/&#xff09;和取模&#xff08;%&am…

如何寻找适合的HTTP代理IP资源?

一、怎么找代理IP资源&#xff1f; 在选择代理IP资源的时候&#xff0c;很多小伙伴往往将可用率作为首要的参考指标。事实上&#xff0c;市面上的住宅IP或拨号VPS代理IP资源&#xff0c;其可用率普遍在95%以上&#xff0c;因此IP可用率并不是唯一的评判标准 其实更应该关注的…