Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.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_Mongodb_Mongodb Query - Fatal编程技术网

Javascript 在Mongodb中搜索和替换?

Javascript 在Mongodb中搜索和替换?,javascript,mongodb,mongodb-query,Javascript,Mongodb,Mongodb Query,给定一组100篇文章,每个文章都有一个带有文章内容的body属性,在该内容中有图像url,如“” 是否有办法检查每篇文章的正文内容,然后查找与“”匹配的内容,并将其替换为类似“”的内容 谢谢 不完全是这样,我的意思是如果你不是在寻找“精确的字符串”,而是希望总是用“相同的”不同的字符串替换 从本质上看,您似乎在为可以通过.update()执行的文档寻找“regex替换”。虽然可以搜索,但没有“捕获”或选项将捕获的部分提供给语句的“更新”部分,例如 因此,为了进行这种更新,您需要循环您的文档并在代

给定一组100篇文章,每个文章都有一个带有文章内容的body属性,在该内容中有图像url,如“”

是否有办法检查每篇文章的正文内容,然后查找与“”匹配的内容,并将其替换为类似“”的内容


谢谢

不完全是这样,我的意思是如果你不是在寻找“精确的字符串”,而是希望总是用“相同的”不同的字符串替换

从本质上看,您似乎在为可以通过
.update()
执行的文档寻找“regex替换”。虽然可以搜索,但没有“捕获”或选项将捕获的部分提供给语句的“更新”部分,例如

因此,为了进行这种更新,您需要循环您的文档并在代码中进行修改。但是,在这方面,这可能会有所帮助:

var bulk = db.collection.initializeOrderedBulkOp();
var counter = 0;

var query = { "url": { "$regex": "^http://example\.com" }};
db.collection.find(query).forEach(function(doc) {

    // Inspect and replace the part of the string
    bulk.find({ "_id": doc._id }).updateOne(
        { "$set": { "url": doc.url.replace("example.com","bucket.aws.com") } }
    );
    counter++;

    // Update once every 1000 documents
    if ( counter % 1000 == 0 ) {
        bulk.execute();
        bulk = db.collection.initializeOrderedBulkOp();
    }

})

// Process any remaining
if ( counter % 1000 != 0 )
    bulk.execute();

因此,这仍然需要循环,但至少每处理1000个文档,更新才会发送到服务器

不完全是这样,我的意思是如果你不是在寻找“精确的字符串”,而是希望总是用“相同的”不同的字符串替换

从本质上看,您似乎在为可以通过
.update()
执行的文档寻找“regex替换”。虽然可以搜索,但没有“捕获”或选项将捕获的部分提供给语句的“更新”部分,例如

因此,为了进行这种更新,您需要循环您的文档并在代码中进行修改。但是,在这方面,这可能会有所帮助:

var bulk = db.collection.initializeOrderedBulkOp();
var counter = 0;

var query = { "url": { "$regex": "^http://example\.com" }};
db.collection.find(query).forEach(function(doc) {

    // Inspect and replace the part of the string
    bulk.find({ "_id": doc._id }).updateOne(
        { "$set": { "url": doc.url.replace("example.com","bucket.aws.com") } }
    );
    counter++;

    // Update once every 1000 documents
    if ( counter % 1000 == 0 ) {
        bulk.execute();
        bulk = db.collection.initializeOrderedBulkOp();
    }

})

// Process any remaining
if ( counter % 1000 != 0 )
    bulk.execute();

因此,这仍然需要循环,但至少每处理1000个文档,更新才会发送到服务器

虽然不推荐使用,但我认为这是一个罕见的用例,可以在您经常需要时使用


这样做的好处是,您不必来回传输文档,而是在服务器上更改它们。您甚至不必实现触发逻辑,只需使用cronjob和
--eval

调用服务器端JS函数即可。虽然不建议这样做,但我认为这是一个罕见的用例,可以在您经常需要时使用


这样做的好处是,您不必来回传输文档,而是在服务器上更改它们。您甚至不必实现触发逻辑,只需使用cronjob和
--eval

调用服务器端JS函数,我昨天查看服务器端Javascript的另一个目的是,文档中说,“如果可能,我们不建议使用服务器端存储函数”等等。知道为什么吗?我可以问这个问题,但如果你有一个简单的答案,那将是非常受欢迎的。它能够在服务器上创建一个未定义的负载,直到影响服务器的核心功能,存储数据。它会消耗索引所需的内存。然而,我在这里看到了一个用例。继续小心。谢谢,这是有道理的。我昨天在看服务器端Javascript的另一个目的,文档说,“如果可能的话,我们不建议使用服务器端存储函数”等等。知道为什么吗?我可以问这个问题,但如果你有一个简单的答案,那将是非常受欢迎的。它能够在服务器上创建一个未定义的负载,直到影响服务器的核心功能,存储数据。它会消耗索引所需的内存。然而,我在这里看到了一个用例。小心行事。谢谢,这是有道理的。