2014-09-12 53 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": "" } } }); 

     } 

    } 

} 
相關問題