Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript MongoDB正则表达式替换_Javascript_Regex_Mongodb_Replace_Mongodb Query - Fatal编程技术网

Javascript MongoDB正则表达式替换

Javascript MongoDB正则表达式替换,javascript,regex,mongodb,replace,mongodb-query,Javascript,Regex,Mongodb,Replace,Mongodb Query,我的表名是:table_video 我在数据库中的字段名是:url\u value 其值为:abcd/abcd.m3u8 我需要的值:新的/新的.m3u8 “abcd”有多个值,上面的url只是一个例子 var cursor = db.table_video.find(); while (cursor.hasNext()) { var x = cursor.next(); print("\n\n-----------------------------------"); print

我的表名是:table_video 我在数据库中的字段名是:url\u value

其值为:abcd/abcd.m3u8

我需要的值:新的/新的.m3u8

“abcd”有多个值,上面的url只是一个例子

var cursor = db.table_video.find();
while (cursor.hasNext()) {
  var x = cursor.next();
  print("\n\n-----------------------------------");

  print("Before : url_value : "+x['url_value']);

  x['url_value'] = x['url_value'].replace(/^(.*?)\/test\/(.*?)\/(.*?)\.m3u8$/g, $1/test/$2_NEW/$2_NEW.m3u8);

  print("After : url_value : "+x['url_value']);

  db.table_video.update({_id : x._id}, x);

}
当我在mongo控制台中执行上述命令时,它给出了一个错误:2015-11-28512:40:08.342+0530 ReferenceError:$1未定义


非常感谢您的任何帮助

如果您的正则表达式错误,您可以使用此1获得预期结果

但实现这一点的最佳方法是使用操作以获得最大效率

var bulk = db.table_video.initializeUnorderedBulkOp();
var count = 0;
db.table_video.find().forEach(function(doc) {
    var newUrlValue = doc.url_value.replace(/^(.*?)\/test\/(.*?)\/(.*?)\.m3u8$/, '$1/test/$2_NEW/$3_NEW.m3u8');
    bulk.find( { '_id': doc._id } ).updateOne( { 
        '$set': { 'url_value': newUrlValue } 
    });
    count++;
    if (count % 100 === 0) {
        // Execute per 100 operation and re-init
        bulk.execute();
        bulk = db.table_video.initializeUnorderedBulkOp();
        count = 0;
    }
})

// Clean up queues
if (count > 0)  bulk.execute();

如果MongoDB版本比2.6版本旧,则需要使用while循环

var cursor = db.table_video.find();
while (cursor.hasNext()) {
    var x = cursor.next();
    print("\n\n-----------------------------------");
    print("Before : url_value : "+x['url_value']);
    var newUrlValue = x['url_value'].replace(/^(.*?)\/test\/(.*?)\/(.*?)\.m3u8$/, '$1/test/$2_NEW/$2_NEW.m3u8');
    print("After : url_value : "+newUrlValue);
    db.table_video.update({ _id : x._id }, { '$set': { 'url_value': newUrlValue } } );

}

  • Regex由@Uchiha提供

  • 在mongodb版本4.2中,您可以使用它来获取匹配,然后您可以使用它来替换部分模式

    我的正则表达式已经在Kate中工作,即使我检查了您提供的链接,但是它在mongodb@user2767817你的正则表达式是错误的,它在Mongo中不起作用。使用Uchiha提供的一个。Uchiha提供的Regex是正确的,但是,当我在mongodb中使用时,它会给出错误:2015-11-28812:40:08.342+0530 ReferenceError:$1未定义请您的问题包括新代码hi@zypA13510,感谢您指出这一点。请随意编辑答案。我会批准的。使用您的评论作为编辑摘要。@zypA13510我重写了决定