You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

mongosh中NumberLong字段单字段展示及low等字段含义咨询

MongoDB NumberLong 序列化差异问题解答

1. low、high、unsigned字段的含义

这三个字段是mongosh依赖的ECMAScript环境对64位整数(对应MongoDB的NumberLong类型)的内部拆分表示:

  • low:存储64位整数的低32位数值
  • high:存储64位整数的高32位数值,整数的符号信息也包含在此(负数的high部分最高位会被置为1)
  • unsigned:布尔值,标记当前64位整数是否为无符号类型

这种表示是JS引擎处理64位整数的标准方式,MongoDB官方文档中对mongosh的类型序列化逻辑有明确说明,这是NumberLong在现代JS环境下的内部存储形式。

2. 将mongosh查询结果转为旧版shell的$numberLong格式

可以通过自定义JSON.stringify的替换函数,识别NumberLong类型并转换格式,具体有两种实现方式:

方式一:单命令行执行

直接在--eval参数中传入带替换逻辑的序列化代码:

mongosh mongodb://localhost:27017/ftest --eval 'JSON.stringify(db.c.find().toArray(), (k, v) => v instanceof NumberLong ? {"$numberLong": v.toString()} : v, " ")' --quiet

方式二:mongosh会话内处理

进入mongosh会话后,分步执行查询与格式化:

// 查询目标集合的所有文档
const docs = db.c.find().toArray();
// 自定义序列化规则,转换NumberLong格式
const formattedDocs = JSON.stringify(docs, (key, value) => {
  if (value instanceof NumberLong) {
    return {"$numberLong": value.toString()};
  }
  return value;
}, " ");
// 输出格式化后的结果
print(formattedDocs);

内容的提问来源于stack exchange,提问作者fgalan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 17:05:57