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



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

当我console.log对象时,一切都很好(只列出了所有的键)。当我为。。在对象上,隐藏的字段不知从哪里弹出(以及感兴趣的键,不要)。它们是有道理的——它们属于猫鼬——但我不想要它们。同样的情况也会发生,当在对象隐藏字段弹出窗口上使用Object.keys或Object.getOwnPropertyNames时,没有任何用处。

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

现在,有两个问题;

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

//编辑

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

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

通过这种方式,我可以迭代Object.getOwnPropertyNames,并替换/删除我不想让客户端知道的键!

我猜您看到的是猫鼬查询返回的Document对象,而实际上您只是想查看数据。如果我的猜测是正确的,你可能会想要这样的东西:

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

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

文档#获取

// path
doc.get('age') // 47
// dynamic casting to a string
doc.get('age', String) // "47"

最新更新