如何检查/迭代节点中的对象?

时间:2012-03-08 21:25:30

标签: javascript node.js mongoose ecmascript-harmony

我从一个mongoose查询中得到一个结果(该对象),并希望在我对该对象进行字符串化并将其发送给客户端之前替换/删除一些键。

当我在console.log对象时,一切都很好(列出所有键,仅此而已)。当我在对象上执行for..in时,隐藏的字段突然冒出(并且感兴趣的键,不要)。它们有意义 - 它们属于猫鼬 - 但我不想要它们。同样的事情发生在Object - hidden字段弹出窗口上使用Object.keys或Object.getOwnPropertyNames时,没有用。

所以我想用util.inspect(obj,true,null,true)检查元素,并将结果记录到控制台。控制台上的结果是一样的,好像我在没有检查的情况下直接记录对象。

现在,有两个问题;

  1. 如何正确检查对象,以便实际获取有关对象的内部/隐藏信息?
  2. 如何迭代对象并仅获取字段? (是的,我正在for..in循环中进行hasOwnProperty检查)
  3. //修改

    好的,我明白了。经过一些调查,我意识到,mongoose对象代理其属性并具有toJSON函数,这解释了为什么console.logs处于预期的输出结构中。解决方案是使用Mongoose自己的toObject方法;

    mongooseObj.toObject({ getters: true, virtuals: false })
    

    这样,我可以迭代Object.getOwnPropertyNames并替换/删除我不想让客户知道的密钥!

2 个答案:

答案 0 :(得分:4)

我猜你正在查看当你真正想要的时候,你正在查看由mongoose查询返回的 文档 对象看到数据。如果我的猜测是正确的,你可能会想要这样的东西:

Model.findOne({ name: 'john' }, function (err, doc) {
    var data = doc.toObject();

    // do whatever you need to with data
    delete data.age;
    delete data.weight;
    data.isAwesome = true;

    // now stringify the data and do something with it
    callback(JSON.stringify(data));
});

答案 1 :(得分:0)

此外,如果您想从 文档 访问某个字段,可以查看:

Document#get

// path
doc.get('age') // 47

// dynamic casting to a string
doc.get('age', String) // "47"
相关问题