【问题标题】:Exclude null attributes from Mongoose query result从 Mongoose 查询结果中排除空属性
【发布时间】:2016-11-10 19:07:14
【问题描述】:

我正在使用 Mongoose 查询我的数据,然后通过我的 express API 将其作为响应返回。我想防止 API 响应中出现空属性。有没有很好的方法可以通过 Mongoose 做到这一点?使用 express 和 Mongoose 的推荐方法是什么?

【问题讨论】:

    标签: node.js mongodb express mongoose


    【解决方案1】:

    您可以覆盖 toJSON mongoose 架构方法以从返回的 json 中删除属性。

    @example

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

    来源how-do-i-remove-all-null-and-empty-string-values-from-a-json-object

    【讨论】:

    • 但是嵌套文档列表可能会变得复杂,不是吗?
    • 是的,这可能很棘手,但没有其他选择可以从猫鼬答案中删除空属性。我用一些代码编辑了我的帖子,以帮助您完成任务。
    • 好的,这对我有用。顺便说一句,是否可以为我所有的猫鼬模型覆盖 toJSON?
    • 一种解决方案可以是创建自己的new Schema(),比如新的CustomSchema(),即覆盖new Schema()toJSON()。如果你有时间,你可以看看mongoose plugins,如果你能用它来做的话,那就去看看吧。
    猜你喜欢
    • 2015-03-06
    • 2017-03-23
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 1970-01-01
    • 2021-07-22
    相关资源
    最近更新 更多