Javascript 在Mongodb中搜索和替换?
给定一组100篇文章,每个文章都有一个带有文章内容的body属性,在该内容中有图像url,如“” 是否有办法检查每篇文章的正文内容,然后查找与“”匹配的内容,并将其替换为类似“”的内容Javascript 在Mongodb中搜索和替换?,javascript,mongodb,mongodb-query,Javascript,Mongodb,Mongodb Query,给定一组100篇文章,每个文章都有一个带有文章内容的body属性,在该内容中有图像url,如“” 是否有办法检查每篇文章的正文内容,然后查找与“”匹配的内容,并将其替换为类似“”的内容 谢谢 不完全是这样,我的意思是如果你不是在寻找“精确的字符串”,而是希望总是用“相同的”不同的字符串替换 从本质上看,您似乎在为可以通过.update()执行的文档寻找“regex替换”。虽然可以搜索,但没有“捕获”或选项将捕获的部分提供给语句的“更新”部分,例如 因此,为了进行这种更新,您需要循环您的文档并在代
谢谢 不完全是这样,我的意思是如果你不是在寻找“精确的字符串”,而是希望总是用“相同的”不同的字符串替换 从本质上看,您似乎在为可以通过
.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的另一个目的,文档说,“如果可能的话,我们不建议使用服务器端存储函数”等等。知道为什么吗?我可以问这个问题,但如果你有一个简单的答案,那将是非常受欢迎的。它能够在服务器上创建一个未定义的负载,直到影响服务器的核心功能,存储数据。它会消耗索引所需的内存。然而,我在这里看到了一个用例。小心行事。谢谢,这是有道理的。