蒙古DeadBeef .toArray()以意想不到的格式返回_id

我喜欢蒙古族的死神,但我很难过。 我想要得到一个简单的.find()返回结果与Mongo的命令行输出相同的JSON格式:

$ db.mycollection.find(); # outputs.. # { ...some data... , "_id" : ObjectId("4f0b371c0000008b6d000008") } 

但是,使用deedbeef,.find()方法不会返回结果或提供callback。 所以我一直在使用.toArray(); 这对我来说似乎是正确的。

 Mongolian = require("mongolian"), server = new Mongolian, db = server.db("mydatabase"), mycollection = db.collection("mycollection"), mycollection.find().toArray(function(err, data){ res.write(JSON.stringify(data)); }); // outputs.. // { ...some data... , _id: { bytes: <Buffer 4f 0b 61 5a 00 00 00 7e 6e 00 00 06> } } 

强化_id二进制(我认为这是什么缓冲区)导致了一个度量@#$! 吨的数据。 什么是从mycollection.find()返回JSON的正确方法?

~~~~~~~

我已经能够从结果中去除_id,如下所示:

  mycollection.find({}, { id:0 }).toArray(function(err, data){ res.write(JSON.stringify(data)); }); 

然而,如何处理从JSON到BSON的_id的更大问题仍然存在。

问题是“数据”是一个文档对象的数组,但并不是所有的数据都具有与JSON兼容的格式。

看看这里: https : //github.com/marcello3d/node-mongolian在BSON数据types部分。

它看起来像你的文档有一个'ObjectId'types,所以你需要在转换为JSON之前删除ObjectId数据,或者你需要将数据转换为一种工作的格式。