首页 > 解决方案 > 从 mongodb 检索 JSON 数据,并在字段中显式添加格式,例如({“field”:{$numberInt:“20”}})。如何处理这些数据?

问题描述

我使用 mongo import 将数据从 csv 文件导入 mongodb。我正在尝试从 Mongodb 领域服务中检索数据。该条目的返回数据如下:

{
       "_id": "6124edd04543fb222e",
       "Field1": "some string",
       "Field2": {
         "$numberDouble": "145.81"
       },
       "Field3": {
         "$numberInt": "0"
       },
       "Field4": {
         "$numberInt": "15"
       },
       "Field5": {
        "$numberInt": "0"
     
     } 

如何通过删除 $numberInt 和 $numberDouble 将其转换为普通 JSON,例如:

{
       "_id": "6124edd04543fb222e",
       "Field1": "some string",
       "Field2": 145.8,
       "Field3": 0,

       "Field4": 15,

       "Field5":  0
     
     } 

不同文档的字段也不同,因此不能直接使用 Mongoose。有什么解决办法吗?也有助于了解为什么将数字存储为 $numberInt:""。

编辑:

对于任何有同样问题的人,这就是我解决它的方法。

文档数组采用 EJSON 格式,而不是像在 upvoted 答案中所说的 JSON。为了将其转换回普通 JSON,我使用 JSON.stringify 首先将我从 map 函数获得的每个文档转换为字符串,然后使用 EJSON.parse 解析它

{strict:false}(这个选项很重要

将其转换为普通 JSON 的选项。

{restaurants.map((restaurant) => {
          restaurant=EJSON.parse(JSON.stringify(restaurant),{strict:false});
}

EJSON.parse文档在这里。要安装和导入的模块是mongodb-extjson。

标签: mongodbaxiosformattingrealm

解决方案


带有 etc. 的格式$numberInt称为 (MongoDB) 扩展 JSON。

您在输出端得到它,或者因为这是您插入数据的方式(意味着您插入的数据不正确,您需要修复摄取端),或者因为您请求扩展 JSON 序列化。

如果数据库中的数据是正确的,并且您想要非扩展的 JSON 输出,您通常需要将自己的序列化程序写入 JSON,因为如何格式化数据有多种可能性。MongoDB 的 JSON 输出格式是您在第一次引用中看到的扩展 JSON。


推荐阅读