我从Mongoose查询获得了结果(对象),并希望在我串行对象之前替换/删除某些键并将其发送到客户端。

当我控制ole.log对象时,一切都很好(所有密钥都列出,没有更多)。当我在对象上做......在对象上时,隐藏的字段突破了无处(和兴趣的键,不要)。他们有意义 - 他们属于猫鼬 - 但我不想要他们。同样的事情发生,当使用Object.keys或Object.getownPropertynames - 隐藏字段弹出窗口,没有有用。 所以我想用util.inspect(obj,true,null,true)检查元素,并将结果记录到控制台。控制台上的结果是相同的,就好像我控制在没有检查的情况下直接播放对象。

现在,两个问题;

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

    //编辑

    好的,我得到它。在一些调查之后,我意识到,Mongoose对象代理其属性并具有一个Tojson函数,这解释了控制台.Logs在预期的输出结构中。解决方案是使用猫鼬自己的ToObject方法;

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

    这样,我可以迭代Object.getownPropertyNames和替换/删除键,我不希望客户知道关于!

有帮助吗?

解决方案

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

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

其他提示

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

文档#get

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top