MongoDB-mongoshell脚本订正数组中的某个数组类型的字段的值

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

MongoDB是一种面向文档的NoSQL数据库。由于其出色的吞吐量和高可扩展性,越来越多的企业正在将其作为首选的数据存储方案。目前我们就在使用这个数据库。在使用MongoDB时,我们有时候需要使用JavaScript语言的特性来操纵数据库中的数据。其中一个常用的语言特性是 instanceof 操作符。在这篇文章中,我们将探讨如何在MongoDB中使用 instanceof 操作符来检查数据是否为一个数组。


先来描述一下背景:最近在做一个需求的时候,入库的数据如果没有值的话 ,etl层面存成了空字符串,但是下面的测试没有针对这种情况做兼容处理,没有测出来,临时方案就是需要我们上游来订正数据,因此,需要写一个脚本去订正数据,而需要订正的数据在一个数组的字段里面。数据的格式如下:

{
"_id" : ObjectId("64004511fdfa1d0111a2d4d3"),
"options" : [
{
"optionType" : 1,
"eventDetails" : [
{
"ratioOld" : "",
"payoutNumber" : 1,
"outturnId" : 12345678,
"ratioNew" : ""
}
],
"optionNumber" : 1,
"optionDescription" : "this is a test",
"defaultOptionIndicator" : 1
}
],
"updateTime" : ISODate("2023-03-07T02:45:47.797Z"),
"createTime" : ISODate("2023-03-02T06:42:46.282Z"),
"auditStatus" : 4
}

比如针对上面的数据,需要找出eventDetails里面的ratioOld字段,如果是""的,就要转成null,转换脚本如下:

db.表名.find({ "options.eventDetails.ratioOld": "" }).forEach(function (item) {
if (item.options instanceof Array) {
item.options.forEach(function (option) {
if (option.eventDetails instanceof Array) {
option.eventDetails.forEach(function (detail) {
if (detail.ratioOld == "") {
detail.ratioOld = null
detail.ratioNew = null;
}
})
}
})
item.updateTime = new Date()
db.getCollection('表名').save(item)
}
});

以上脚本只是做一个参考,实际运用的时候要根据实际情况再进行调整。

往期推荐

MongoDB-通过docker搭建一个用来练习的mongodb数据库​

MongoDB-MongoDB简介​

MongoDB-在windows电脑本地安装一个mongodb的数据库​

MongoDB-使用mongo/mongosh命令行连接数据库​

MongoDB-快速上手MongoDB命令行的一些简单操作​

MongoDB-_id字段的含义介绍​

MongoDB-插入数据insert、insertOne、insertMany、save用法介绍​

MongoDB-表数据查询的基本用法介绍​

MongoDB-查询语句中>、>=、<、<=、=、!=、in、not in用法介绍​

MongoDB-查询语句中逻辑运算符not、and、or、nor用法介绍​

MongoDB-查询语句中$exists以及结合$ne、$nin、$nor、$not使用介绍​

MongoDB-使用$type查询某个字段的类型是否为xxx​

MongoDB-查询中$all的用法介绍​

​MeterSphere教程:python2前置脚本查mongodb库提取参数&查库断言​

MongoDB-查找表里面重复的记录​

MongoDB-怎么将csv数据导入mongodb数据库的某张表中​


阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: goshell