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

2つのコレクションのmongodiffを比較する

    シェルで次のことを試してください。コレクション内の各アイテムを繰り返し、IDに基づいて各ドキュメントを照合しようとします。

    2つのコレクションがあるとしますdb.col1 およびdb.col2

    > db.col1.find()
    { "_id" : 1, "item" : 1 }
    { "_id" : 2, "item" : 2 }
    { "_id" : 3, "item" : 3 }
    { "_id" : 4, "item" : 4 }
    
    > db.col2.find()
    { "_id" : 1, "item" : 1 }
    { "_id" : 2, "item" : 2 }
    { "_id" : 3, "item" : 3 }
    { "_id" : 4, "item" : 4 }
    

    次に、2つのコレクションを比較するためのjavascript関数を作成できます

    function compareCollection(col1, col2){
        if(col1.count() !== col2.count()){
            return false;
        }
    
        var same = true;
    
        var compared = col1.find().forEach(function(doc1){
            var doc2 = col2.findOne({_id: doc1._id});
    
            same = same && JSON.stringify(doc1)==JSON.stringify(doc2);
        });
    
        return same;
    }
    

    次に、呼び出しは次のようになります:

    > compareCollection(db.col1, db.col2)
    true
    

    次に、3番目のコレクションがある場合db.col3

    > db.col3.find()
    { "_id" : 1, "item" : 1 }
    

    そしてこれを比較してください

    > compareCollection(db.col1, db.col3)
    false
    

    期待どおりの結果が得られます。

    一致するドキュメントがあり、データが異なる4番目のコレクションもある場合db.col4

    > db.col4.find()
    { "_id" : 1, "item" : 10 }
    { "_id" : 2, "item" : 2 }
    { "_id" : 3, "item" : 3 }
    { "_id" : 4, "item" : 4 }
    

    これにより、falseも返されます

    > compareCollection(db.col1, db.col4)
    false
    


    1. MongoDBAPIを使用してCosmosDBに接続する際のタイムアウトエラー

    2. DBRefをJsonに解決する

    3. MongoDBレプリカセットのセットアップ

    4. Springデータとmongodb-@Transactional内のSpringを使用した単純なロールバック