Реагируйте на навигацию по иерархии навигатора

Вы можете попробовать выполнить конвейер агрегации в версии 3.4.

Запрос агрегирования для замены строки поиска на заменяющую строку.

Логика заключается в поиске строки поиска ( $indexOfCP), а затем $concat, чтобы присоединиться ко всем частям ($substrCP), части перед соответствующей строкой поиска, заменой строки и остальной части исходной строки.

Массовое обновление для записи нового структура url.

var bulk = db.getCollection(col).initializeUnorderedBulkOp();
var count = 0;
var batch = 1;

db.getCollection(col).aggregate([
  {"$project":{
    "URL":{
      "$let":{
        "vars":{
          "len":{
            "$strLenCP":"helloWorldt"},"start":{"$indexOfCP":["$URL","helloWorldt"]}
        },
        "in":{
          "$concat":[
            {"$substrCP":["$URL",0,"$$start"]},
            "helloWorld",
            {"$substrCP":[
              "$URL",
              {"$add":["$$start","$$len"]},
              {"$subtract":[{"$strLenCP":"$URL"},{"$add":["$$start","$$len"]}]}
            ]}
          ]
        }
      }
    }
  }}
]).forEach(function(doc){ 
    var _id = doc._id; 
    var url = doc.URL; 
    bulk.find({ "_id" : _id }).updateOne(
        { $set: {"URL" : url } }
    ); 
    count++;  
    if (count == batch) { 
      bulk.execute(); 
      bulk = db.getCollection(col).initializeUnorderedBulkOp(); 
      count = 0;
    } 
});

 if (count > 0) { 
    bulk.execute(); 
 }
0
задан Tushar Gupta - curioustushar 17 January 2019 в 13:54
поделиться