如何使用_bsontype属性处理来自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 

正如你所看到的,这是穿…这是我的代码:

 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]); } } } 

这是我的input(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,这是一个对象,所以我的函数去了在这个recursion的内部..得到以下S÷¯çò9þ w ..我是吧?

也似乎如果我不能得到我的“processId”和“_id”键,因为这个,我猜是我的_bsontype …所以最后,我的问题是,我如何走过我的对象没有得到这样的结果吗?,你必须看到有一个“id”属性,包含垃圾数据,我不希望它在我的结果,例如查找所有的密钥id,但仍然能够得到ObjectId .str值为我的属性“processId”或“_id”。

提前致谢。

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

正如你可以看到我的函数changeIDs得到3个参数,我只是改变了JSON参数,它应该是一个JSON(这是)你可以看到我的JSON输出作为文本在我的问题,所以这是一个有效的JSON,但是我做了一个stringifystring的parsing..之后,我再试一次..它正在工作。

那么解决scheme? newJson = JSON.parse(JSON.stringify(json));

为什么? 好吧,我更好的select就是用这种方法,当我们做一个对象的串化时,它的对象改变如下:

  • 未定义的值在结果中消失。
  • 失去原型的属性
  • function死了

例如,如果一个json有一个对象DATE,那么这个对象将被stringify为Date.toString(),所以它将存储string表示。 如果该函数没有一个string将是未定义的。

这最后是为什么在做一个stringify它工作后,我的函数ObjectId()没有生存到我stringify,但它转换为它包含的string值,这是Mongo对象的id值…