Node.js 从Mongoose查询结果中排除空属性

Node.js 从Mongoose查询结果中排除空属性,node.js,mongodb,express,mongoose,Node.js,Mongodb,Express,Mongoose,我使用Mongoose查询我的数据,然后通过express API将其作为响应返回。我想防止API响应中出现空属性。通过猫鼬有什么好办法吗?使用express&Mongoose执行此操作的推荐方法是什么?您可以覆盖toJSONMongoose模式方法以从返回的json中删除属性 @示例 YourSchemaName.methods.toJSON = function() { var obj = this.toObject(); if (obj.SOME_FIELD_NAME === n

我使用Mongoose查询我的数据,然后通过express API将其作为响应返回。我想防止API响应中出现空属性。通过猫鼬有什么好办法吗?使用express&Mongoose执行此操作的推荐方法是什么?

您可以覆盖
toJSON
Mongoose模式方法以从返回的json中删除属性

@示例

YourSchemaName.methods.toJSON = function() {
  var obj = this.toObject();

  if (obj.SOME_FIELD_NAME === null) delete obj.SOME_FIELD_NAME;
  return obj;
}

嵌套对象处理 这里的代码将删除所有属性上的
null
数据

const removeEmpty = (obj) => {
  Object.keys(obj).forEach(key =>
    (obj[key] && typeof obj[key] === 'object') && removeEmpty(obj[key]) ||
    (obj[key] === '' || obj[key] === null) && delete obj[key]
  );
  return obj;
};

来源

但如果文档列表中包含嵌套的文档,则可能会变得复杂,不是吗?是的,这可能会很棘手,但除了从mongoose答案中删除空属性之外,别无选择。我已经用一些代码编辑了我的帖子,以帮助您完成任务。好的,这对我很有用。顺便说一句,有可能为我所有的mongoose模型覆盖toJSON吗?解决方法可以是创建自己的
newschema()
,就像新建
CustomSchema()
,这样就可以覆盖
newschema()
toJSON()。如果你有时间的话,你可以看一看,如果你能用它来做的话,idk。