关于这些帖子:Mongoose prototype : how to insert an url dynamically?
我希望做的几乎相同(URI动态插入)。 提供的解决方案很好,但我不明白一些事情......
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var PicturesSchema = new Schema({
album : { type : String, required : true, trim : true },
pictures : { type : Array, required : false, trim : true }
});
PicturesSchema.virtual('pictureUrls').get(function() {
return this.pictures.map(function(picture) {
return 'https://s3.amazonaws.com/xxxxx/'+ picture;
});
});
var Pictures = mongoose.model('Pictures', PicturesSchema);
// Demo:
var pictures = new Pictures({
album : 'album1',
pictures : [
'1434536659272.jpg',
'1434536656464.jpg',
'1434535467767.jpg'
]
});
console.log( pictures.getPics() );
如何仅保留字段" PicturesURL"包含图像的完整URL而不显示"图片"场?
如何知道data.ToJson
返回错误,如何检索并显示JSON格式的查询结果:没有方法' toJson' ?
Pictures.find()。exec(function(err,data){
if(err){
console.log(err);
}
console.log('%j', data.toJSON({ virtuals : true }) );
});
答案 0 :(得分:0)
只存储没有图片的图片网址的策略是在保存时创建一个Mongoose中间件。
然后,您可以使用图片的名称填充picture
字段,并且完整的网址将是存储在数据库中并稍后检索的网址。
例如:
PictureSchema.pre('save', function (next){
if (this.isModified(pictureUrls){
this.pictureUrls = this.pictureUrls.map(function(picture){
return 'https://s3.amazonaws.com/xxxxx/'+ picture;
})
}
});
使用此解决方案,每次修改图片数组时,它将遍历数组的每个元素并添加s3路径。
由于它不是虚拟的,因此您可以更轻松地使用toObject
或toJson
将事件与模型结合使用。