使用mongo方法的动态URL

时间:2015-06-17 13:05:35

标签: node.js mongodb mongoose

关于这些帖子: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() );
  1. 给定的解决方案注入一个"虚拟字段"除了保留"图片"带有图像名称的字段(不带URL)。
  2. 如何仅保留字段" PicturesURL"包含图像的完整URL而不显示"图片"场?

    1. 如何知道data.ToJson返回错误,如何检索并显示JSON格式的查询结果:没有方法' toJson'

      Pictures.find()。exec(function(err,data){

          if(err){
              console.log(err);
          }
      
          console.log('%j', data.toJSON({ virtuals : true }) );
      });
      

1 个答案:

答案 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路径。

由于它不是虚拟的,因此您可以更轻松地使用toObjecttoJson将事件与模型结合使用。