2014-09-12 76 views
0

我需要更新图像的字符串对象,我以前的代码是:如何更新从字符串到对象的Mongodb结构?

斯卡拉:

case class Property (
    id: ObjectId = new ObjectId, 
    image: String, 
    description: String 
) 

的MongoDB:

{ 
    "_id": ObjectId("5412b438e864b9afc27dcd43"), 
    "_t": "models.Property", 
    "image": "http: \/\/img.com\/8i0\/v1jj24e5by8nz4dy2bh6nnespw1i", 
    "description": "image" 
} 

现在我更新:

斯卡拉:

case class Image (
    imageUrl: String, 
    isHosted: Boolean, 
    imageThumbUrl: String, 
    imageMediumUrl: String 
) 

case class Property (
    id: ObjectId = new ObjectId, 
    image: Image, 
    description: String 
) 

但是当我这样做,我得到[例外:类models.property需要'图像'的值] 这是由于旧的数据库结构,有没有查询的方式来将旧数据转换为新结构或 什么我应该添加哪些代码来适应新的结构变化?请帮助,在此先感谢。

+0

这不是因为你的旧数据库结构。 [MongoDB是无模式的](http://docs.mongodb.org/manual/data-modeling/),两个文档可以有完全不同的结构。问题来自代码中的某处。 – 2014-09-12 10:50:45

+0

嗨@MarkusWMahlberg感谢您的回复。但是,当我的数据库属性集合为空时,此代码工作。 – Monnster 2014-09-12 10:57:12

+0

同样,MongoDB不强制执行文档结构。甚至没有这样的机制。 – 2014-09-12 10:59:04

回答

0

替代的答案是更新你的数据库使用JS,如果你们有不同的方式请发布在这里。感谢:

function() { 
    var cursor = db.property.find(); 
    var property; 
    while (cursor.hasNext()) { 
     property = cursor.next(); 

     if(typeof property['image'] == 'string' || property['image'] instanceof String){ 

    db.property.update({_id: property['_id']}, { $set:{ "image":{"isHosted": false, "imageUrl": property['image'], "imageMediumUrl": "", "imageThumbUrl": "" } } }); 

     } 

    } 

} 
相关问题