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
相关产品推荐
相关产品推荐

