MongoDB 根据 _id 获取记录的创建时间并回填记录中

1、单条更新        

MongoDB 集合 test1,有字段 _id,createTime,createTimeStr,name字段 , 查询createTime不为空的,根据 _id 生成该条记录的创建时间时间戳并填写到字段 createTime 字段中 ,并打印时间戳

// 查询 createTime 为空的记录
var cursor = db.getCollection("test1").find({"createTime" : null});while (cursor.hasNext()) {var doc = cursor.next();try {// 提取时间戳部分var timestamp = doc._id.getTimestamp();var timestamp2 = Date.parse(timestamp);// 格式化时间字符串为“yyyyMMdd”var formattedDate = timestamp.toISOString().slice(0, 10).replace(/-/g, '');print("Document _id: " + doc._id +"  , timestamp2  " + timestamp2 + "   , Create Time: " + formattedDate);db.test1.update({ _id: doc._id },{ $set: { createTime: timestamp2, createTimeStr: formattedDate } });} catch (e) {// 打印异常信息print("Error processing document _id: " + doc._id + ". Error: " + e);// 继续执行下一个文档continue;}
}

2、批量更新

var bulkUpdateOps = [];
var batchSize = 1000; // 每批次更新的文档数量var cursor = db.getCollection("test1").find({ "createTime": null });cursor.forEach(function (doc) {try {var timestamp = doc._id.getTimestamp();var timestamp2 = Date.parse(timestamp);var formattedDate = timestamp.toISOString().slice(0, 10).replace(/-/g, '');bulkUpdateOps.push({"updateOne": {"filter": { "_id": doc._id },"update": {"$set": {"createTime": timestamp2,"createTimeStr": formattedDate}}}});// 批量更新达到 batchSize 时执行一次if (bulkUpdateOps.length === batchSize) {db.getCollection("test1").bulkWrite(bulkUpdateOps);bulkUpdateOps = []; // 重置批量更新数组}} catch (e) {print("Error processing document _id: " + doc._id + ". Error: " + e);// 继续执行下一个文档}
});// 处理剩余的批量更新
if (bulkUpdateOps.length > 0) {db.getCollection("test1").bulkWrite(bulkUpdateOps);
}

代码解释

使用 MongoDB 的 bulkWrite 方法对满足特定条件的文档进行批量更新,而不是逐个文档进行更新。以下是代码的主要步骤:

  1. 初始化变量:

    • bulkUpdateOps: 用于存储批量更新操作的数组。
    • batchSize: 每批次更新的文档数量。
  2. 查询文档:

    • 使用 find 方法检索具有特定条件("createTime": null)的文档。
  3. 遍历文档:

    • 使用 forEach 方法遍历查询结果的每个文档。
  4. 文档处理:

    • 提取文档的时间戳部分,并将其转换为 Unix 时间戳 (timestamp2) 和格式化日期字符串 (formattedDate)。
    • 将更新操作添加到 bulkUpdateOps 数组中。
  5. 批量更新检测:

    • 检查 bulkUpdateOps 数组的长度是否达到设定的 batchSize
    • 如果是,使用 bulkWrite 方法执行批量更新,然后重置 bulkUpdateOps 数组。
  6. 异常处理:

    • 在处理文档时,使用 try-catch 块捕获任何可能的异常,例如无法解析时间戳。
    • 如果发生异常,打印错误信息,但不中断整体流程,继续处理下一个文档。
  7. 处理剩余批量更新:

    • 在遍历完成后,检查 bulkUpdateOps 数组是否包含剩余的更新操作。
    • 如果有,使用 bulkWrite 方法执行这些剩余的批量更新。

通过批量操作来提高 MongoDB 数据库中文档的更新效率。在大数据集的情况下,批量更新通常比逐个更新更为高效。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA快捷使用-快捷键模板

常用快捷模板 .方法的使用,例如输入 arr.null 回车 其他常规方法直接输入回车,不需要对象通过.来调用。 创建变量 psfi 创建公开int类型常量 public static final int prsf 创建 私有静态变量 private static final psf 创建公开静态变量 public static final创…

【问题系列】同时管理多版本node方案

目录 一、问题描述 二、解决方案 三、详细步骤 3.1 安装NVM: 3.2 运行NVM 3.3 安装Node.js 3.4 切换Node.js版本 3.5 验证安装: 四、拓展 4.1 设置默认 Node.js 版本 4.2 列出已安装的 Node.js 版本 4.3 其他命令介绍 一、问题描述 需要运行…

C#实现串口通讯

1、官网下载Launch Virtual Serial Port Driver Virtual Serial Port Driver - create and emulate virtual COM port,开个虚拟串口: Pair模式(一对,成双成对的意思,就是COM1向COM2传或者COM2向COM1,好比两台机器的CO…

软件工程期末复习

● 用例:借书 ●参与者:管理员,借阅者 ●操作流: ① 管理员进入图书借阅界面,用例开始。 ② 系统要求输入借阅者的借书证编码。 ③系统检验借书证编码,如果正确,则显示借阅者的信息。 A1:借书证编码有错。 A2: 如果该借…

巨量引擎大众消费发布“十佳好课”榜单:涵盖五大行业 助力商家进阶

2023,中国消费市场出现温和复苏态势,在不确定市场环境下,大众消费商家如何用好科学营销手段,实现确定性增长?如何紧跟平台趋势,把握生意增长先机? 为了给商家持续提供前沿适配的营销方法、解决实际生意卡点&#xff…

MYSQL一一函数一一字符串函数

嘿嘿大家好我回来啦,今天我们要学习的是MYSQL中的函数,函数呢我们又分为字符串函数,数值函数,日期函数,流程函数来介绍,今天重点介绍字符串函数(从小题到案例方便你们更加深入的理解) 函数指的是一段可以直…

软件测试面试题合集,金三银四offer稳了。。。

前言 前面看到了一些面试题,总感觉会用得到,但是看一遍又记不住,所以我把面试题都整合在一起,都是来自各路大佬的分享,为了方便以后自己需要的时候刷一刷,不用再到处找题,今天把自己整理的这些…

操作系统期末复习题

进程同步(P、V操作) 桌上有一空盘,允许存放一只水果。爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者取用,请用P、V原语实现爸爸、儿子、女…

nginx源码分析-1

使用gdb查看函数上下文: gdb attach nginx的work线程 监听端口状态时: 断点打在ngx_http_process_request 并通过浏览器触发请求时:

剑指offer题解合集——Week2day2

文章目录 剑指offerWeek2周二:剪绳子AC代码思路: 剑指offerWeek2 周二:剪绳子 题目链接:剪绳子 给你一根长度为 n绳子,请把绳子剪成 m段(m、n都是整数,2≤n≤58 并且 m≥2)。每段…

Unity-序列化和反序列化

序列化是指把对象转换为字节序列的过程,而反序列化是指把字节序列恢复为对象的过程。序列化最主要的用途就是传递对象和保存对象。 在Unity中保存和加载、prefab、scene、Inspector窗口、实例化预制体等都使用了序列化与反序列化。 1 可序列化类型 1> 自定义的具有Serial…

简易考试系统第1关:简易考试系统之用户注册

任务描述 本关任务:实现简易考试系统中新用户注册的功能。 编程要求 仔细阅读右侧编辑区内给出的代码框架及注释,在 Begin-End 中实现简易考试系统中新用户注册的功能,具体要求如下: User.java 提供了用户的基本信息&#xff0…

在linux下添加中文输入

一共三个步骤,过程中有参考Linux最详细且好用的安装中文输入法教程 - 知乎 1. 打开左侧的software下载安装Fcitx 2. 点击左下侧搜索language support,把keyboard input method system改成Fcitx 4 3. input source把中文放在最前面 成功&#xff0…

基于openGauss5.0.0全密态数据库等值查询小案例

基于openGauss5.0.0全密态数据库等值查询小案例 一、全密态数据库简介二、环境说明三、测试步骤四、使用约束 一、全密态数据库简介 价值体现: 密态数据库意在解决数据全生命周期的隐私保护问题,使得系统无论在何种业务场景和环境下,数据在传…

Web 3.0 是什么

第 1 章 明晰Web 3.0 从本章开始,就进入了本书的第一篇章,入门Web3.0,在第一篇章中将会让读者对Web3.0有一个整体的认知,为学习后面的章节打下基础。 在本章中,主要介绍的是Web的发展历史,包涵Web1.0、Web2.0、Web3.0的发展过程,以及资本为什么需要入场Web3.0、Web3.0…

遗传算法的应用——求解一元函数的极值

遗传算法的应用——求解一元函数的极值 1 基本概念2 预备知识3.1 模拟二进制转化为十进制的方法3.2 轮盘赌选择算法 3 问题4 Matlab代码5 运行效果6 总结 1 基本概念 遗传算法(Genetic Algorithm,GA)是模拟生物在自然环境中遗传和进化过程从而形成的随机全局搜索和优化方法&am…

1. pytorch mnist 手写数字识别

文章目录 一、数据集介绍1.1、简介1.2 详细介绍1、数据量2、标注量3. 标注类别4.数据下载5.数据集解读 二、读取、加载数据集1、pytorch 自带库函数2、通过重构Dataset类读取特定的MNIST数据或者制作自己的MNIST数据集 三、模型构建四、 runtraintest评估模型的性能检查点的持续…

java面试题19

什么是Java中的内存管理(Memory Management)?它有什么作用? 答案:内存管理是操作系统或虚拟机对计算机内存进行管理的机制,用于分配、释放和回收内存资源。在Java中,内存管理可以通过Java虚拟机…

Postman接口测试(附教程)

前言 之前还没实际做过接口测试的时候呢,对接口测试这个概念比较渺茫,只能靠百度,查看各种接口实例,然后在工作中也没用上,现在呢是各种各样的接口都丢过来…

MAC 安装nginx

使用Homebrew方式进行安装 步骤: 1、更新 Homebrew brew update 2、下载并安装 Nginx brew install nginx 3、查看 nginx 配置信息 brew info nginx zhanghuaBreeze ~ % brew info nginx // 版本信息 > nginx: stable 1.25.1 (bottled), HEAD HTTP(S) se…