在Mongo中搜索并替换数组中的字符串

tho*_*olh 4 mongodb

我想在Mongo中编辑以下数据结构:

{
   "images" : [{
      "image_id" : 46456,
      "image_path" : "http://cdn.site.com/image.jpg",
      "image_thumbnail" : "http://cdn.site.com/image.jpg",
      "image_detailed" : "http://cdn.site.com/image.jpg",
      "image_type" : "0"
    }, {
      "image_id" : 46452,
      "image_path" : "http://cdn.site.com/image.jpg",
      "image_thumbnail" : "http://cdn.site.com/image.jpg",
      "image_detailed" : "http://cdn.site.com/image.jpg",
      "image_type" : "2"
    }, {
      "image_id" : 46453,
      "image_path" : "http://cdn.site.com/image.jpg",
      "image_thumbnail" : "http://cdn.site.com/image.jpg",
      "image_detailed" : "http://cdn.site.com/image.jpg",
      "image_type" : "0"
    }, {
      "image_id" : 46454,
      "image_path" : "http://cdn.site.com/image.jpg",
      "image_thumbnail" : "http://cdn.site.com/image.jpg",
      "image_detailed" : "http://cdn.site.com/image.jpg",
      "image_type" : "A"
    }]
}
Run Code Online (Sandbox Code Playgroud)

我想将整个数组中的所有'http'替换为'https',无论它们在哪个字段中.

我该怎么办?

谢谢.

Par*_*ade 6

MongoDB中没有内置功能.您可以通过循环所有记录来将所有http替换为https.在Mongo shell中,您可以按如下方式执行此操作:

String.prototype.replaceAll=function(s1, s2) {return this.split(s1).join(s2)}

var cursor = db.myCollection.find({},{_id:0});
while(cursor.hasNext()) {
    var obj = cursor.next();
    var objStr = JSON.stringify(obj);
    var newObjStr = objStr.replaceAll("http","https");
    db.myCollection.update(obj,JSON.parse(newObjStr));
}
Run Code Online (Sandbox Code Playgroud)