javascript - 如何使用 _bsontype 属性处理来自 mongoDB 的文档

标签 javascript json node.js mongodb

您好,我正在遍历一个 JSON 数组,该数组由 mongoDB 中的文档查询产生。 事实上,我遇到了以下行为,但我不知道为什么会这样:

in key: _bsontype |value: ObjectID
in key: id |value: S÷¯çò9þ w
in key: _bsontype |value: ObjectID
in key: id |value: S÷¯çò9þ h
in key: _bsontype |value: ObjectID
in key: id |value: S÷¯çò9þ h
in key: name |value: Default Process
in key: processType |value: Public
in key: id |value: BPMNDiagram_1
in key: name |value: procurement subprocess

如你所见,这是 wear... 这是我的代码:

function changeIDs(json, map, count){
  for(var key in json){
    if(json.hasOwnProperty(key))
    if(typeof json[key] === 'object')
      changeIDs(json[key], map, count);
    else{
        console.log("in key: "+key + " |value: "+json[key]);
    }

  }
}

这是我输入的一部分(json 参数):

[
    {
        "_id": "538df78eafe7f28d39fe2077",
        "processId": "538df71bafe7f28d39fe2068",
        "processMeta": {
            "id": "538df71bafe7f28d39fe2068",
            "name": "Default Process",
            "processType": "Public"
        },
        "diagram": {
            "id": "BPMNDiagram_1",
            "name": "procurement subprocess"
        },
        "plane": {
            "id": "BPMNPlane_1",
            "bpmnElement": "538df71bafe7f28d39fe2068"
        }
    },
{other objects..},{other objects..}
]

是的,processId,和_id是用ObjectId函数生成的,好像这里是问题出现的地方,我不太确定,但我的猜测是每个_bsontype对应于mongoSB Object Id,这是一个对象所以我的函数递归地进入这个内部..得到以下 S÷¯çò9þ w..,我说得对吗?

如果我无法在我的 for 中获取“processId”和“_id”键,似乎也是如此,我想是我的 _bsontype ... 所以最后,我的问题是,如何在没有得到结果的情况下遍历我的对象?,你必须看到有一个包含垃圾数据的“id”属性,我不希望它出现在我的结果中寻找例如,所有键 ID,但仍然能够为我的属性“processId”或“_id”获取 ObjectId.str 值。

提前致谢。

最佳答案

以防万一,如果将来有其他不幸的人遇到同样的问题。

如您所见,我的函数 changeIDs 获得了 3 个参数,我只是更改了 json 参数,它应该是一个 json(它确实是)您可以在我的问题中看到我的 json 输出作为文本,所以它是有效的json,但是我解析了一个 stringify 字符串..然后我再次尝试..它正在工作。

那么解决方案呢? newJson = JSON.parse(JSON.stringify(json));

为什么?好吧,我更好的选择是,通过这种方式,当我们对一个对象进行字符串化时,它会按以下方式更改对象:

  • 未定义的值在结果中消失。
  • 丢失原型(prototype)属性
  • 功能消亡

例如,如果一个 json 有一个对象 DATE,这个对象将被字符串化为 Date.toString(),所以它会存储字符串表示。如果函数没有 to 字符串,则将是未定义的。

最后这就是为什么在执行字符串化后它可以工作,我的函数 ObjectId() 没有在我的字符串化中存活下来,但它转换为它包含的字符串值,即 Mongo 对象 ID 值...

关于javascript - 如何使用 _bsontype 属性处理来自 mongoDB 的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24024647/

相关文章:

javascript - 有什么好的方法可以确定网页的 "actual content width"吗?

javascript - 居中标记

php - select2 单击时重定向

javascript - 同步异步创建的 Promise

javascript - Discord.js 14 - 当成员加入时无法将图像发送到特定 channel

javascript - 自定义图片展开预览标签错位

javascript - 加/减数字

javascript - 如何在javascript中查找对象的indexof

json - 编码为 JSON 的对象的大小(以位为单位)?

javascript - 我无法在 restify( Node JS)中从 req.params 读取参数值