sql >> データベース >  >> NoSQL >> MongoDB

Mongodbで検索して置き換えますか?

    正確ではありません。つまり、「正確な文字列」を探していなくて、常に「同じ」別の文字列に置き換えたい場合です。

    基本的に、 .update()を介して実行できるドキュメントの「正規表現置換」を探しているようです。 。 $ regex> 検索では、キャプチャされた部分を $ set

    したがって、この種の更新を行うには、ドキュメントをループしてコードを変更する必要があります。ただし、 Bulk Operations API ここで役立つことがあります:

    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ドキュメントが処理されるごとに1回だけサーバーに送信されます。



    1. RockMongoまたはmViewerのmongodbクライアントで集計クエリを実行する方法

    2. laravel-mongodbを使用したoauth2-server-laravelの設定

    3. OData-MongoDBの奇妙なインデックス[Mongoose:Cast Error]

    4. 既存のすべてのフィールドを含め、ドキュメントに新しいフィールドを追加します