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

MongoDBとNodeJをバッチ挿入

    Mongooseで基盤となる一括操作APIを使用するには、.collectionを介してAPIにアクセスできる必要があります。 マングースモデルのプロパティ。 APIを使用する前に、mongooseがdbに正常に接続するのを待ちます。これは、Mongooseが内部バッファリングシステムで動作しないため、現在「initializeOrderedBulkOp()」を実際にはサポートしていないためです。したがって、次の実装(テストされていない)のようなものがあなたにアイデアを与えるはずです:

    var mongoose = require('mongoose'),
        express = require('express'),
        Schema = mongoose.Schema;
    
    mongoose.connect('mongodb://localhost/mydb');
    var collection1Schema = new Schema({},{ strict: false, collection: 'Collection1' }),    
        MyModel = mongoose.model("MyModel", collection1Schema );
    
    mongoose.set('debug', true);
    
    mongoose.connection.on("open", function (err) {
        if (err) throw err;  
        var bulkUpdateOps = MyModel.collection.initializeUnorderedBulkOp(), 
            counter = 0;
    
        MyModel.find({}).lean().exec(function (err, docs) {
            if (err) throw err; 
    
            docs.forEach(function (doc){
                // computations
                var c1, c2, c3, c4, Field8;
                c1 = 10 + (0.03*doc.Field3);
                c2 = (doc.Field2 == 1) ? 1: 0.03;
                c3 = 7 - (doc.Field5.match(new RegExp(".", "g")) || []).length;
                c4 = (doc.Field2 == 1) ? Math.pow(doc.Field, -0.6) : 1;
                Field8 = c1*c2*c3*c4;
    
                counter++;
    
                bulkUpdateOps.find({ "_id": doc._id }).updateOne({
                    "$set": { "Field8": Field8 }
                });
    
                if (counter % 500 == 0 ) {
                    bulkUpdateOps.execute(function(err, result) {
                        if (err) throw err;  
                        bulkUpdateOps = MyModel.collection.initializeUnorderedBulkOp();
                        console.log(result);
                    });
                } 
    
            });     
    
            if (counter % 500 != 0 ) {            
                bulkUpdateOps.execute(function(err, result) {
                    if (err) throw err;  
                    console.log(result);
                });         
            }       
        });
    
        var app = express();
        app.listen(3000, function () {
            console.log('now listening on http://localhost:3000');
        });
    });
    



    1. 集計のMongodbインデックス作成

    2. ドキュメントフィールドに格納されている配列のページ付け

    3. MongoDB:DBへの接続を確認してください

    4. Redisセットとハッシュ