【问题标题】:Mongoose default value if not exist in find如果 find 中不存在 Mongoose 默认值
【发布时间】:2016-10-20 04:36:57
【问题描述】:

我们在一个 Schema 中添加了一个新字段:

第一版:

// Schema Definition Collection
const ImageSchema = new Schema({
    IdUser: String,
    Name: String,
    Source: String        
    }
}, { collection: 'Image' });


const Image = mongoose.model('Image', ImageSchema);
module.exports = Image;

新版本:

// Schema Definition Collection
const ImageSchema = new Schema({
    IdUser: String,
    Name: String,
    Source: String,
    Size: String        
    }
}, { collection: 'Image' });


const Image = mongoose.model('Image', ImageSchema);
module.exports = Image;

稍后,在我的带有 Express 的 Api 中,我们将返回这样的架构:

exports.getImageById = co(function* (req, res) {

  const image = yield Image.findById(req.params.id).exec();
  res.json(image);

});

在我完成的 jQuery ajax 回调中,有时我在字段 Size 中有未定义,但我希望有其他值(例如 0kb)是该值是空的(未填充)。这可能吗?或者我是否需要检查 Size 字段 typeof 是否与“未定义”不同?

谢谢!

【问题讨论】:

  • 在res.json(image); 之前添加image.Size = image.Size? image.Size : "0kb" 怎么样?
  • 这是一个不错的选择...但是如果明天我们添加其他新字段,我们需要再次检查另一个字段...也许是自动的?这个解决方案是性能问题吗?谢谢!
  • 对不起@TalhaAwan 这个解决方案不起作用......总是正确的......谢谢!
  • 这只是您要找到的一个对象,因此性能不是问题。如果您不想更新数据库,这只是一种解决方法,但@andresk 的答案是我想说的更好的解决方案。
  • 如果我将 .lean() 添加到我的查询中,您的解决方案还可以! ;) 也许,为了性能,检查 typeof 是否等于客户端 javascript 中的未定义...但我无法更新 3M 的文档...

标签: javascript mongoose


【解决方案1】:

您可以将default 值添加到您的Size 字段:

const ImageSchema = new Schema({
    IdUser: String,
    Name: String,
    Source: {type: String, default: '0kb'}        
    }
}, { collection: 'Image' });

这样,所有添加的没有大小的新文档都将具有此默认值。对于已经存在的,您可以更新数据库。

【讨论】:

  • 但在这种情况下,我需要更新所有文档 (3 M),我不需要这样做。谢谢。
  • 对不起,我没听懂。你不想更新数据库?在这种情况下,您可以向数据库添加验证,对于将来添加的字段,您可以在 Mongoose 上设置默认值。
  • 是的,我不想更新数据库中的 3 M 文档。谢谢@andresk
猜你喜欢
  • 2012-11-24
  • 2022-12-15
  • 2019-01-03
  • 2012-03-22
  • 2011-06-26
  • 1970-01-01
  • 2020-04-22
  • 2016-02-11
  • 2021-10-27
相关资源
最近更新 更多