【问题标题】:How to update Mongodb structure from string to object?如何将 Mongodb 结构从字符串更新为对象?
【发布时间】:2014-09-12 10:42:22
【问题描述】:

我需要将图像字符串更新为对象,我的旧代码是:

斯卡拉:

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

蒙哥:

{
   "_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
)

但是当我这样做时,我得到 [例外:类模型。属性需要“图像”的值] 这是由于旧的数据库结构,是否有一种查询方式可以将旧数据转换为新结构或 我应该添加什么代码来适应新的结构变化?请帮助,在此先感谢。

【问题讨论】:

  • 这不是因为你的旧数据库结构。 MongoDB is schemaless,两个文档可以有完全不同的结构。问题出在代码中的某个地方。
  • 嗨@MarkusWMahlberg 感谢您的回复。但是当我的 db 属性集合为空时,此代码有效。
  • 再一次,MongoDB 不强制执行文档结构。甚至没有这样的机制。
  • @MarkusWMahlberg 再次感谢回复,在这种情况下,您知道我应该做什么代码调整吗?再次感谢
  • 您很可能需要调试,因为我假设您检查了明显的内容。

标签: mongodb scala playframework


【解决方案1】:

另一种答案是使用 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": "" } } });

      } 

   }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-28
    • 2022-11-10
    • 2019-05-25
    • 1970-01-01
    • 2016-04-10
    • 1970-01-01
    • 2019-08-04
    • 2016-12-07
    相关资源
    最近更新 更多