【问题标题】:mongoose stringify removes empty elementsmongoose stringify 删除空元素
【发布时间】:2014-04-24 10:15:42
【问题描述】:

我正在从我的 mongo 数据库中检索具有空值的 mongoose 对象:

{ _id: 53049728456d4416243bf65f,
  userCreated: {},
  status: { userCreated: {} },
  user: 'patrice',
}

这很好,因为没有数据。

但是当我使用 JSON.stringify(obj) stringify 时,我得到了:

{ _id: 53049728456d4416243bf65f,
  user: 'patrice'
}

userCreatedstatus 没有被字符串化,也没有出现在我的输出中......

知道这是从哪里来的以及如何解决它吗?

我的模型是这样的:

new mongoose.Schema({
  user: type: String, default: '',
  status: {
    name: { type: String, default: '' },
    userCreated: {
      time: { type: Date, default: Date.now }
    }
  },
  userCreated: {
    time: { type: Date, default: Date.now }
  }
})

P.

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    JSON.stringify 通常不会剥离空对象,因此这是特定于猫鼬的。

    我建议尝试 .toObject() 或 .toJSON()

    http://mongoosejs.com/docs/api.html#document_Document-toObject

    这将在 .stringify 期间被调用,因此它可能是删除空对象的原因。 http://mongoosejs.com/docs/api.html#document_Document-toJSON

    所以先试试这个:

    JSON.stringify(obj.toObject());
    

    【讨论】:

    • 没用。 obj.toObject() 似乎从输出中删除了 userCreatestatus 。与obj.toJSON()相同
    • 明白了! obj.toObject({minimize:false}) 成功了。似乎最小化默认为 true 并删除空对象。谢谢@will-shaver
    【解决方案2】:

    尝试在架构选项中将最小化设置为 false。为我工作。

    opts.minimize = false; //stop empty objects being turfed
    var s = new Schema(f_obj, opts);
    

    【讨论】:

      猜你喜欢
      • 2018-06-17
      • 2011-04-08
      • 2019-04-06
      • 1970-01-01
      • 2023-03-09
      • 2016-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多