MongoDB插入数据时如何将对象字段值从double类型转换为Long类型
MongoDB字段从Double转为Long类型解决方案
插入时直接指定Long类型(推荐,从根源避免问题)
针对你使用的Node.js MongoDB驱动场景,操作步骤如下:
- 先从驱动包中引入Long类型构造函数:
const { Long } = require('mongodb');
- 插入前先处理chart数组内的x字段,转换为Long类型后再执行插入:
// 处理原数据的x字段 const processedChart = data.chart.map(item => ({ ...item, x: Long.fromNumber(Number(item.x)) })) // 执行插入操作 client.db("customDB").collection("chart").insertMany([{"chart": processedChart}])
如果是其他运行环境,对应导入对应驱动的长整型构造函数即可,比如Python环境使用bson.int64.Int64封装数值。
已存储的旧数据批量修正
如果已经有数据存入数据库需要批量修正,可在MongoDB Shell中执行以下更新语句:
db.chart.updateMany( // 匹配所有chart数组中x为double类型的文档 { "chart.x": { $type: "double" } }, // 聚合更新,遍历数组转换x字段类型 [{ $set: { "chart": { $map: { input: "$chart", in: { $mergeObjects: ["$$this", { x: { $toLong: "$$this.x" } }] } } } } }] )
注意:转换前请确认x字段的数值均为整数,若存在小数位$toLong会直接截断小数部分,建议先校验数据再执行更新操作。
内容的提问来源于stack exchange,提问作者nodemongo
相关产品推荐
相关产品推荐

