使用mongoose保存对象后,我可以使用字段子集返回对象的最简单方法是什么?

Sco*_*zer 4 rest mongoose node.js express

我正在使用带有express和node的mongoose来创建REST API.保存新对象后,我想将对象返回给用户.但是,不想返回一些敏感字段,如密码,信用卡详细信息,权限,帐单历史记录等.

我认为会有相当于.select的地方,你可以只选择一个字段的子集来返回给用户.但是,它似乎不存在,"标准"只是删除您不想传递回用户的字段,如下所示:

  org.save(function(err, org) {
    if (err) return handleError(err, res);
    orgobj = org.toObject();
    delete orgobj.__v;
    delete orgobj._id;
    delete orgobj.billing;
    delete orgobj.plans;
    delete orgobj.permissions;
    return res.send(orgobj);
  });
Run Code Online (Sandbox Code Playgroud)

有更有效的方法吗?我不喜欢这个,因为如果随后添加了一个字段,有人必须记住要专门删除它.此外,出于性能原因,我也不想"重新选择"该字段.

ran*_*nel 9

您可以添加一个方法,getPublicFields该方法返回一个严格包含公共字段的对象.

orgSchema.methods.getPublicFields = function () {
    var returnObject = {
        name: this.name,
        address: this.address,
        randomField: this.randomField
    };
    return returnObject;
};
Run Code Online (Sandbox Code Playgroud)

如果您希望这样做,您还可以向该函数添加回调并执行一些其他查询来聚合数据.方法完成后,只需调用即可

var orgPublic = org.getPublicFields();
Run Code Online (Sandbox Code Playgroud)