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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

窦再兴

你的鼓励是我最大的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值