MongoDB小课堂: 文档更新操作权威指南之整篇替换与字段级更新深度解析

核心面试聚焦:业务问题+系统问题+设计题---字节、阿里、美团等整理统计 业务系统及其他相关面试问题整理:线上相关问题排查+高并发系统的限流+高并发秒杀系统设计+负载均衡+一个网站有 20 亿 url 存在一个黑名单中,这个黑名单要怎么存?若此时随便输入一个 url,你如何快速判断该 url 是否在这个黑名单中?并且需在给定内存空间(比如:500M)内快速判断出? 阅读详情

MongoDB更新操作概述

MongoDB的文档更新是数据管理的核心操作,通过update和findAndModify命令实现
其核心价值在于提供原子性保证(单个文档级操作)和灵活模式(整篇替换或字段级更新)

更新操作由三要素构成:

  • query:筛选目标文档的条件(类同find语法)
  • update:定义更新行为的文档(完整文档或操作符指令)
  • options:控制更新行为的选项(如多文档更新、写入策略等)

关键术语简注

  • 原子性:单个文档的更新操作不可分割,确保数据一致性
  • 操作符:以$开头的指令(如$set),用于字段级更新
  • 嵌套字段:文档内嵌的子文档,通过点记号(field.subfield)访问

要点摘要

  1. MongoDB支持两种更新模式:整篇替换(覆盖文档)和字段级更新(精准修改)
  2. 所有更新操作在文档级别保证原子性
  3. _id字段作为文档主键,在更新中不可变更

整篇文档替换操作


当update参数为完整文档(不含操作符)时,执行全文档覆盖。

语法与示例

// 替换Alice的账户文档
db.accounts.update(
  { name: "Alice" },          // 查询条件
  { name: "Alice", balance: 123 }, // 新文档内容 
  { upsert: false }           // 选项:禁止自动创建
);

输出结果:

{
  "nMatched": 1,    // 匹配文档数
  "nModified": 1,   // 修改文档数
  "nUpserted": 0    // 新增文档数 
}

关键约束与解决方案

约束类型问题描述解决方案
主键不可变_id字段值禁止修改新文档必须包含原_id值
单文档限制仅更新首条匹配文档需启用multi: true选项
数据覆盖风险未指定字段将被删除优先使用字段级更新操作符

错误处理示例:

// 尝试修改_id引发错误
db.accounts.update(
  { name: "Alice" },
  { _id: "new_id", balance: 100 }  // 触发WriteError 
);

要点摘要

  1. 必须保留原文档_id值,否则操作失败
  2. 默认仅更新第一条匹配文档,需显式启用多文档更新
  3. 文档大小变化可能导致存储位置移动,影响性能

字段级更新操作

通过更新操作符精准修改文档局部内容,避免全量替换风险。

操作符体系总览

操作符功能描述适用场景原子性
$set设置/新增字段值修改或添加字段✔️
$unset删除指定字段移除冗余数据✔️
$inc字段值增减计数器、余额调整✔️
$rename重命名字段数据结构迁移✔️
$min仅当新值更小时更新价格下限控制✔️

1 ) $set操作符深度应用

基础语法:

{ $set: { <field1>: <value1>, <field2>: <value2>, ... } }

多场景实现:

// 原始文档结构
{
  _id: ObjectId("507f191e810c19729de860ea"),
  name: "Jack",
  balance: 2000,
  contact: ["123-4567", { state: "Alabama" }]
}
 
// 场景1:更新已有字段
db.accounts.update(
  { name: "Jack" }, 
  { $set: { balance: 3000 } }  // 修改balance
);
 
// 场景2:新增嵌套文档
db.accounts.update(
  { name: "Jack" },
  { $set: { info: { openingDate: new Date(), branch: "NY" } } }
);
 
// 场景3:修改嵌套字段
db.accounts.update(
  { name: "Jack" },
  { $set: { "info.openingDate": new Date("2025-01-01") } }
);
 
// 场景4:更新数组元素(索引0)
db.accounts.update(
  { name: "Jack" },
  { $set: { "contact.0": "987-6543" } }
);
 
// 场景5:跳跃添加数组元素(自动补null)
db.accounts.update(
  { name: "Jack" },
  { $set: { "contact.5": "jack@domain.com" } }  // 索引3-4填充null
);

2 ) $unset操作符行为解析
语法与规则:

{ $unset: { <field1>: "", <field2>: "", ... } }  // 值可为任意占位符

操作示例:

// 删除字段(普通+嵌套)
db.accounts.update(
  { name: "Jack" },
  { $unset: { balance: "", "info.branch": "" } }
);
 
// 数组元素删除(值置null,长度不变)
db.accounts.update(
  { name: "Jack" },
  { $unset: { "contact.0": "" } }  // 结果: [null, {state: "Alabama"}]
);

错误处理:

// 删除不存在的字段 → nModified: 0
db.accounts.update(
  { name: "Jack" },
  { $unset: { nonExistingField: "" } }
);

数组更新特性可视化

在这里插入图片描述

要点摘要

  1. $set支持跨层级操作(嵌套字段、数组索引)
  2. $unset对不存在的字段操作无效(nModified=0)
  3. 数组跳跃更新时,空缺索引自动填充null
  4. 高频更新场景优先使用字段级操作,避免文档移动开销

其他更新操作符速览

操作符功能示例
$inc字段值增减{ $inc: { balance: 50 } }
$mul字段值乘法{ $mul: { balance: 1.1 } }
$min仅当新值更小时更新{ $min: { balance: 100 } }
$max仅当新值更大时更新{ $max: { balance: 500 } }
$rename重命名字段{ $rename: { old: "new" } }

案例:多语言实现与对比

JavaScript原生操作

// 整篇替换(需包含_id)
db.accounts.update(
  { name: "Alice" },
  { _id: ObjectId("orig_id"), balance: 500, status: "active" }
);
 
// 字段级增量更新
db.accounts.update(
  { name: "Bob" },
  { $inc: { balance: 50 }, $set: { lastUpdated: new Date() } }
);

SQL等效操作对照

/* 整篇替换 (类似REPLACE INTO) */
UPDATE accounts 
SET name='Alice', balance=123 
WHERE name='Alice';
 
/* 字段级更新 (等效$set) */
UPDATE accounts 
SET balance = 3000, 
    info = JSON_SET(info, '$.openingDate', '2023-01-01') 
WHERE name='Jack';
 
/* 字段删除 (等效$unset) */
ALTER TABLE accounts DROP COLUMN balance; -- 或 SET balance=NULL
-- 或
UPDATE accounts SET balance = NULL WHERE name = 'Jack';

总结:

  1. 整篇更新适用于完全替换文档,但受限于 _id 不可变和单文档操作。
  2. 字段级操作符(如 $set/$unset)支持精准修改,可处理嵌套字段与数组。
  3. 数组更新时,跳过下标将填充 null,删除元素不改变数组长度。

NestJS + Mongoose企业级实现

import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import { AccountDocument } from './account.schema';
 
@Injectable()
export class AccountService {
  constructor(
    @InjectModel('Account') private accountModel: Model<AccountDocument>
  ) {}
 
  // 整篇替换(保留_id)
  async replaceAccount(name: string, newData: any): Promise<void> {
    const target = await this.accountModel.findOne({ name });
    if (!target) throw new Error('Account not found');
    await this.accountModel.updateOne(
      { _id: target._id },
      { ...newData, _id: target._id }  // 强制保留原_id
    );
  }
 
  // 字段级更新(支持批量操作)
  async updateFields(
    filter: object, 
    updates: object, 
    options?: { multi?: boolean }
  ): Promise<void> {
    await this.accountModel.updateMany(
      filter,
      { $set: updates },
      { multi: options?.multi ?? false }
    );
  }
 
  // 安全删除字段
  async removeFields(filter: object, fields: string[]): Promise<void> {
    const unsetObj = fields.reduce((obj, field) => 
      ({ ...obj, [field]: "" }), {});
    await this.accountModel.updateMany(filter, { $unset: unsetObj });
  }
}

要点摘要

    1. 原生MongoDB操作需手动处理_id约束
    1. SQL通过ALTER TABLE或SET NULL模拟字段删除
    1. NestJS实现需显式保护_id并支持批量更新
    1. 生产环境建议添加事务保障多文档一致性

结论:最佳实践与性能优化

核心原则总结

  1. 更新模式选择策略

    • 整篇替换:仅适用于文档结构重构场景
    • 字段级更新:95%+场景首选,减少网络传输与存储波动
  2. 性能优化指南

    场景优化方案
    高频小额更新优先使用$inc/$set
    大文档频繁修改避免整篇替换,预防文档移动开销
    多文档事务更新启用MongoDB ACID事务(v4.0+)
  3. 错误防御机制

在这里插入图片描述

终极检查清单

  • ✅ 整篇替换前确认包含原_id
  • ✅ 数组更新时预判null占位影响
  • ✅ 关键业务启用Write Concern保障持久化
  • ✅ 更新后执行find()验证数据一致性

行业洞察:根据MongoDB官方性能报告,字段级更新相比整篇替换降低40%+的I/O压力,在金融等高并发场景中始终作为首选方案

要点摘要

  1. _id不可变性是更新操作的铁律
  2. 字段级操作符是性能与安全的平衡点
  3. 数组更新需警惕null占位副作用
  4. 事务机制为跨文档更新提供原子性保障
【信息科学与工程学】【数据中心】第三十五篇 云计算数据中心的学科知识04 编号学科(课程)核心知识点在云计算/云存储/云网络/云安全/云MaaS中的作用代表教材/资料/论文 + 数学方程式列表工业界应用D1421​云原生数据库:TiDB​HTAP(混合事务/分析处理)、分布式SQL、水平扩展、强一致(Raft)、自动故障恢复、与MySQL兼容、TiFlash列式引擎提供弹性扩展的分布式数据库;支撑高并发在线交易与实时分析教材:《TiDB in Action》PingCAP(2020) 论文:《TiDB: A Raft-based HTAP Database》(2017) 阅读详情

相关推荐

先进半导体材料与器件Chapter3

Chapter3 异质结双极晶体管(HBT) 作者:毛茏玮 / Saint 掘金:https://juejin.im/user/5aa1f89b6fb9a028bb18966a 微博:https://weibo.com/5458277467/profile?topnav=1&wvr=6&is_all=1 GitHub:github.com/saint-000 知乎:https:/...

一个会写代码的烤鸭 5805

更新文档

目录1 更新集合中的文档1.1 更新单个文档1.2 更新多个文档2 替换文档3 行为3.1 原子性3.2 _id字段3.3 字段顺序3.4 Upsert选项3.5 写确认 本章节使用以下Java同步驱动程序方法: com.mongodb.client.MongoCollection.updateOne; com.mongodb.client.MongoCollection.updateMany;...

zxwjx的专栏 352

RNA 8. SCI文章中差异基因表达--热图 (heatmap) 进阶:从数据标准化到多维度注释

本文深入探讨了RNA差异基因表达分析中热图(heatmap)的进阶应用,从数据标准化到多维度注释。详细介绍了FPKM标准化、Z-score转换等关键技术,以及pheatmap包的高级注释功能,帮助研究者制作发表级热图。文章还提供了视觉优化策略和生物学意义衔接的实用建议,助力SCI论文的数据可视化。

weixin_29051149的博客 303

MongoDB 类replace替换字符串指定内容

MongoDB 类replace替换字符串指定内容,replaceOne 语法仅能够替换目标字段中第一次出现的字符串,如果出现多次需要多次执行 replaceOne 语法;如果用javascript 语法可以完全兼容多个目标字符替换,极大的方便我们处理数据。

勤于笔记,成于点滴。 2669

scGPT实战指南:如何用生成式AI加速你的单细胞多组学研究?

本文提供了scGPT在单细胞多组学研究中的实战指南。详细介绍了从环境部署、数据预处理到细胞类型注释与扰动预测等核心任务的操作流程。通过利用生成式AI和Transformer基础模型,scGPT能够显著加速分析,并提升细胞注释的准确性及基因调控网络推断的深度,为研究人员提供了强大的AI分析引擎。

weixin_29215815的博客 403

从零开始理解固定翼能量控制:Pixhawk TECS算法保姆级教程

本文深入解析了Pixhawk飞控中的TECS(总能量控制)算法,旨在解决固定翼无人机纵向控制中速度与高度耦合的经典难题。教程从物理概念出发,阐释了TECS通过管理总能量与分配能量形态来实现油门与升降舵解耦的核心思想,并提供了参数调试的实战指南,帮助开发者优化飞行性能。

white的博客 251

MongoDB - 集合和文档的增删改查操作

其中,db.collection 是要新增文档的集合名称,key1、key2等是文档中的字段名称,而value1、value2等是对应字段的值。更新user集合中 age小于等于25的所有文档,将email设置为"hh@qq.com",将age设置为28。① 更新字段的值:更新user集合中与指定筛选器匹配的第一个文档,将name为"John"的age更新为22。连接词隐式地连接复合查询的子句,以便该查询选择集合中与所有条件匹配的文档。结合使用每个子句,以便查询选择集合中至少匹配一个条件的文档。

你今天真好看呀 2051

主升浪潜伏主图指标公式 提前潜伏,持仓待涨,通达信炒股指标公式

浙江世宝,第一次出现信号2022年6月1日,当日冲高回落,收涨3.48%,随后涨涨突破前高,回踩后出现第二次主升潜伏信号,时间2022年6月13日,当日收涨9.46%,后市连续涨停,走出12连板行情。九安医疗,第一次出现信号,黄色文字,当日2021年11月1日,涨幅0.19%,第二次出现信号一字涨停,没机会买进,第三次是T字,需要手快,后市连续上涨,接近20倍的大牛股。启明信息,突破区间后的回踩转涨位置出现信号,时间2021年11月29日,当日涨幅1.14%,次日爆发,波段涨幅152.65%。

weixin_69760830的博客 1886

Mac下MySQL的配置和修改密码以及忘记密码后的重置密码

1 ) Mac下MySQL的配置和修改密码 2 ) 忘记并重置密码 启动MySQL服务,通过 $ps aux | grep mysql 判断是否启动该服务,若未启动,则到 系统偏好设置/MySQL面板 启动服务 软件默认会安装到:/usr/local/mysql 目录,进入这个目录下的bin目录:$cd /usr/local/mysql/bin 执行 $./mysql -u root -p 通过初始密码登录MySQL 通...

Wang的专栏 6259

“华为杯”研究生数学建模竞赛2020年-【华为杯】B题:汽油辛烷值优化建模(附优秀论文)

摘 要:本文通过机器学习算法和数据挖掘技术,建立了汽油辛烷值(RON)损失的预测模型,在保证汽油产品脱硫效果的前提下,以降低汽油辛烷值损失在30%以上为目标,给出每个样本的优化操作条件。针对第一问,对285号和313号原始数据用给定的数据处理规范进行预处理,对每一列变量求期望,得到最终的数据补充到相应的样本编号。针对第二问,首先对数据样本按照最大最小限幅以及拉依达法则进行列变量清洗,通过两轮特征筛选确定变量:结合处理后的数据,针对产品中硫含量、RON损失值用。

getusushu的博客 1251

PCL 直通滤波

内容抄自优快云点云侠:[【2024最新版】PCL点云处理算法汇总(C++长期更新版)](https://blog.youkuaiyun.com/qq_36686437/article/details/114160640)。质量无忧,永久免费,可放心复制粘贴。

m0_51204289的博客 906

mysql数据库的一些简单的sql语句 内连接 - 表的关联查询

# 创建一个user表 create table users( id int primary key auto_increment, name varchar(20), dpt_id int ); # 向user表中插入数据 insert into users values (null,'刘备',1), (null,'关羽',2), (null,'赵

Wang的专栏 4264

基于Simulink环境,提供一个关于如何对EMI抑制的DC-DC变换器进行仿真建模的示例

EMI定义:电磁干扰是指任何能中断、阻碍、降低或限制电气设备有效性能的电磁能量。重要性合规性:确保产品符合国际和地方的EMC标准。可靠性:减少因外部或内部EMI导致的系统故障风险。挑战滤波设计:合理设计输入输出滤波器以抑制传导EMI。布局与接地:良好的PCB设计对于减少辐射EMI至关重要。屏蔽:使用金属屏蔽来保护敏感电路不受外界干扰。首先明确要模拟的任务内容。设计一个能够在高频操作下有效抑制EMI的DC-DC变换器。根据工作频率和谐振元件值确定合适的滤波器参数。

xiaoheshang_123的博客 148

数据库、数据库类型、RDBMS以及MySQL

什么是数据库 数据库 就是按一定的结构来组织、存储和管理数据的仓库 可以很方便的进行crud, 能提供多个用户共享、具有尽可能小的冗余度、与应用程序批次独立的数据集合。 其他持久储存缺点:文件操作(不灵活) 数据库类型 包括 : 关系型 和 非关系型 【关系型】 MySQL MariaDB PostgreSQL Microsoft SQL Server Oracle数据库 Sybase 【...

Wang的专栏 4039

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Eggjs笔记:Eggjs集成ElasticSearch及CRUD操作

相关文档 https://www.elastic.co/guide/index.html https://www.elastic.co/guide/en/elasticsearch/client https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/configuration.html https://www.elastic.co/guide/en/elasticsearch/client/javascrip

Wang的专栏 3530

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Redis: 集群高可用之故障转移和集群迁移

若要检查源和目标是否数据统一,还可选择阿里配套工具RedisFullCheck。3.4 使用 RedisFullCheck 工具检查。下载官方编译好的工具包,直接解压后就能使用。故障转移,包括自动故障转移和手动故障转移。运行之后,就给一个反馈结果,如果是。1.2 原集群与目标集群结构不一致。1.1 原集群与目标集群结构一致。2 ) 手动故障转移。

Wang的专栏 2918

VB摄像头监控

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

Python笔记:基于Django框架的数据库设计

概述 需要根据《项目建议书》、《需求说明书》、界面原型、各种标准规范对数据库进行设计, 我们目前先参考这一设计图 结构设计 1 ) 找实体 实体是实体-关系模型的基本对象, 是现实世界中各种事物的抽象。 凡是可以相互区 开并可以被识 的事、物、概念等对象均可认为是实体。 基本的实体列表如下: 会员 类别 商品 订单 订单详情 收货地址 商品评论 商品图片 友情链接 站内公告 … ...

Wang的专栏 2772

Elastic Stack梳理:集群搭建指南之高可用架构与实战部署

本文介绍了Elasticsearch分布式架构和Cerebro监控工具的部署策略。主要内容包括: ES集群角色划分(主节点、数据节点、协调节点)及功能说明 Cerebro监控工具的独立部署方法和访问方式 集群拓扑规划示例,包含节点IP分配和架构拓扑图 各类型节点的配置原则和数量计算公式 高可用主节点配置要点及示例配置 生产环境优化建议,包括分片规划、硬件配置和安全措施 文章提供了完整的集群部署方案,涵盖从基础概念到具体实施的各个环节,适用于不同规模的ES集群建设。

Wang的专栏 2545

Redis: 集群环境搭建,集群状态检查,分析主从日志,查看集群信息

当从节点获得足够多的选票时,它就会成为新的主节点,并增加自己的configEpoch来更新槽位配置。在Redis集群中,纪元的更新通常是由节点间的通信和状态变更触发的。例如,当某个节点接收到来自其他节点的状态变更通知时,它会比较通知中的纪元与自己的纪元。如果通知中的纪元更大,则更新自己的纪元。确保集群状态的一致性:通过递增的纪元,集群中的节点可以确保它们对集群状态的认知是一致的。通过递增的纪元版本号,集群中的节点可以确保它们对集群状态的认知是一致的,并解决可能出现的配置冲突问题。4 )纪元的更新机制。

Wang的专栏 2466

MySQL: 数据库性能的决定性因素之从双十一大促高并发场景看系统瓶颈与优化路径

电商大促期间,数据库面临高并发写入、连接数暴增、慢查询积压等核心挑战。本文分析了锁竞争、主从延迟等关键性能瓶颈,并提出多种优化方案:1)使用乐观锁通过版本号控制库存超卖;2)CAS机制实现无锁并发;3)分布式锁协调多节点操作。这些方案在保证数据一致性的同时提升吞吐量,适用于库存扣减、订单创建等典型场景,有效解决数据库扩展难题。

Wang的专栏 2426

Redis: Sentinel哨兵监控架构及环境搭建

在主从模式下,我们通过从节点只读模式提高了系统的并发能力并发不断增加,只需要扩展从节点即可,只要主从服务器之间,网络连接正常主服务器就会将写入自己的数据同步更新给从服务器,从而保证主从服务器的数据相同在这种架构下,它仍然是有一些缺点的,比如说它的可靠性保证不是很好,因为主从模式下,主节点故障了便无法提供写入的服务现在,我们通过哨兵来解决这个问题然后,主节点其实写的压力也是并没有被释放的包括主从之间的数据是相同的,它还有数据冗余一个问题后面集群也会解决这个问题。

Wang的专栏 2181

MongoDB小课堂: 高级查询操作符与游标管理综合指南之深度整合逻辑操作符、字段处理、数组查询与游标控制的最佳实践

MongoDB查询操作符与游标管理摘要 本文整合了MongoDB常用查询操作符和游标管理的关键知识点: 比较操作符: $in和$nin用于多值匹配,注意$nin会包含字段缺失文档 结合$exists可处理字段缺失问题 逻辑操作符: $and可简写为逗号分隔条件 $or可用$in优化等值查询性能 $not和$nor需谨慎处理字段缺失 字段操作符: $exists检查字段存在性 $type支持按BSON类型筛选 数组操作符: $all要求包含所有指定元素 $elemMatch匹配满足条件的数组元素 正则表达式:

Wang的专栏 2145

Redis: 集群测试和集群原理

Redis Cluster 没有单机那种 16个数据库 (0 - 15) 数据库的概念了,就是我们已经看不到数据库了。而是分成了 16384 个 slots (槽位) ,每个节点负责其中一部分槽位,槽位的信息存储于每个节点中。2 ) 16384 个 slots (槽位)那我们客户端这边是怎么来操作集群的呢?1 ) SET/GET 命令。2 ) 开启从节点只读模式。

Wang的专栏 2102

Eggjs笔记:详解Mongoose的聚合管道以及populate实现关联查询

基于mongodb的聚合管道 此处忽略之前mongodb在eggjs中需要配置的步骤,前文已有说明,现在开始在controller中调用(应该封装到service中的,仅作为示例) const result = await this.app.mongo.aggregate('order', { pipeline: [ { $lookup: {...

Wang的专栏 2096

MySQL: 数据库监控核心要素与实施策略

数据库监控是确保系统稳定的关键,涵盖服务可用性、性能、主从复制和资源使用等方面。核心监控包括:通过真实连接和查询验证数据库可用性;跟踪QPS、TPS和并发线程数等性能指标;监控主从复制的链路状态和延迟;以及关注磁盘空间等服务器资源。实现方案包括网络连接验证、读写测试和连接数阈值监控。性能监控需持续记录数据趋势,并采用精准方法检测阻塞事务和复制延迟。全面的数据库监控能有效预防故障,保障系统稳定运行。

Wang的专栏 2096

MySQL: 索引优化策略详解:核心原则、高级应用与维护实践

本文介绍了数据库索引优化的核心策略。第一部分重点讲解高效索引设计原则:禁止在索引列使用表达式或函数;合理使用前缀索引以平衡选择性和存储空间;设计联合索引时应优先考虑高频查询、高选择性和小宽度列;以及利用覆盖索引减少回表查询。第二部分探讨索引的高级应用,特别强调通过合理设计索引优化排序操作。文章指出索引列顺序需与ORDER BY完全一致,并分析了InnoDB与MyISAM存储引擎在排序支持上的差异。通过实际SQL示例展示了索引优化前后的性能差异,为数据库性能调优提供了实用指导。

Wang的专栏 2061
上一篇: MongoDB小课堂: 游标操作与文档投影技术深度解析
下一篇: MongoDB小课堂: 全面解析更新操作符——重命名、数值操作与数组处理指南
Wang's Blog
博客等级 码龄12年 7438粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值