0

あるMongoDB relpSetに挿入されたドキュメントを変更し、mongo-oplogとnode.jsを使用して別のドキュメントに挿入しています

node.jsを使用してmongoにドキュメントを挿入するために、このリンクをたどっています。ドキュメントを引数として挿入するラッパーを作成しました。

function insertMongo(doc) {
    var insertDocument = function (db, callback) {
        db.collection('new').insertOne(doc, function (err, result) {
            assert.equal(err, null);
            console.log("Inserted a document into the collection,", result);
            callback();
        });
    };


    MongoClient.connect(url, function (err, db) {
        assert.equal(null, err);
        insertDocument(db, function () {
            db.close();
        });
    });
}

このラッパー関数を、挿入する json ドキュメントを作成する関数 (parseJSON) のコールバックとして呼び出しています。

function parseJSON(data, callback)
{
    var parsedData = {};
    // logic to modify JSON taken from oplog
    // returns populated parsedData object
    callback(parsedData);
}

私は mongo-oplog の中で parseJSON を呼び出しています:

oplog.on('insert', function (doc) {
  var a = JSON.parse(JSON.stringify(doc.o));
  parseJSON(a, insertMongo);
});

これは、ドキュメントを挿入した後、次のような出力で無限ループに陥っています。

o: { _id: 56d99e4a95ed520a0814d87a } }
doc { _id: '56d99e4a95ed520a0814d87a' }
{ ts: { _bsontype: 'Timestamp', low_: 41, high_: 1457102410 },
    h: { _bsontype: 'Long', low_: -249545631, high_: 547021855 },
    v: 2,
        op: 'i',
    ns: 'user.new',
    o: { _id: 56d99e4a95ed520a0814d87b } }
doc { _id: '56d99e4a95ed520a0814d87b' }
Inserted a document into the collection,
{ ts: { _bsontype: 'Timestamp', low_: 42, high_: 1457102410 },
    h: { _bsontype: 'Long', low_: -1687338339, high_: 1742865608 },
    v: 2,
    op: 'i',
    ns: 'user.new',
    o: { _id: 56d99e4a95ed520a0814d87c } }
doc { _id: '56d99e4a95ed520a0814d87c' }
Inserted a document into the collection,

どんな助けでも大歓迎です。ありがとうございました。

4

1 に答える 1