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

連結されたフィールドの結果を使用してドキュメントを更新します

    .aggregate() 集約パイプラインへのアクセスを提供するメソッド。

    $project $concat フィールドを連結する演算子。

    次に、集計結果を使用して、"bulk"<を使用してコレクションを更新できます。 / a> 効率化のための運用

    var bulk = db.events.initializeOrderedBulkOp(); 
    var count = 0;
    db.events.aggregate([
        { "$project": {
            "iso_start": { "$concat": [ "$date", " ", "$time" ] }, 
            "iso_end": { "$concat": [ "$date", " ", "$endtime" ] }    
        }}
    ]).forEach(function(doc) { 
        bulk.find({'_id': doc._id}).updateOne({
            "$set": {
                "iso_start": new Date(doc.iso_start),
                "iso_end": new Date(doc.iso_end)
            }
        }); 
        count++; 
        if(count % 200 === 0) { 
            // update per 200 operations and re-init
            bulk.execute();     
            bulk = db.events.initializeOrderedBulkOp(); 
        } 
    })
    // Clean up queues
    if(count > 0) bulk.execute();
    

    この操作の後、ドキュメントは次のようになります。

    {
            "_id" : "aaaaaaaaaaaa",
            "title" : "Hello, World!",
            "date" : "Thursday, November 12, 2015",
            "time" : "9:30 AM",
            "endtime" : "11:30 AM",
            "iso_start" : ISODate("2015-11-12T06:30:00Z"),
            "iso_end" : ISODate("2015-11-12T08:30:00Z")
    }
    {
            "_id" : "bbbbbbbbbbbb",
            "title" : "To B or not to B",
            "date" : "Thursday, November 12, 2015",
            "time" : "10:30 AM",
            "endtime" : "11:00 AM",
            "iso_start" : ISODate("2015-11-12T07:30:00Z"),
            "iso_end" : ISODate("2015-11-12T08:00:00Z")
    }
    

    "Bulk" > APIとそれに関連するメソッドは、次のリリース(バージョン3.2)で非推奨になるため、そのバージョンからは、 db.collection.bulkWrite() メソッド。

    var operations = [];
    db.events.aggregate([
        { "$project": {
            "iso_start": { "$concat": [ "$date", " ", "$time" ] }, 
            "iso_end": { "$concat": [ "$date", " ", "$endtime" ] }    
        }}
    ]).forEach(function(doc) {
        var operation = {
            updateOne: { 
                filter: { "_id": doc._id }, 
                update: { 
                    "$set":  { 
                       "iso_start": new Date(doc.iso_start),
                       "iso_end": new Date(doc.iso_end)
                    }
                }
            }
        }; 
        operations.push(operation); 
    })
    operations.push({ ordered: true, writeConcern: { w: "majority", wtimeout: 5000 } });
    db.events.bulkWrite(operations)
    



    1. scanAndOrderの削除:MongoDBクエリ結果でtrue

    2. SpringRedisのソートキー

    3. MongoDBへの接続はprocess.exit()で自動的に閉じられますか?

    4. grailsmongodb接続が拒否されました