MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come confrontare 2 raccolte mongodb?

Puoi provare a utilizzare mongodb eval combinato con la tua funzione di equalizzazione personalizzata, qualcosa del genere.

I tuoi metodi non funzionano perché nel primo caso stai confrontando i riferimenti agli oggetti, che non sono gli stessi. Nel secondo caso, non vi è alcuna garanzia che to_json genererà la stessa stringa anche per gli oggetti che sono gli stessi.

Invece, prova qualcosa del genere:

var compareCollections = function(){
    db.test1.find().forEach(function(obj1){
        db.test2.find({/*if you know some properties, you can put them here...if don't, leave this empty*/}).forEach(function(obj2){
            var equals = function(o1, o2){
                // here goes some compare code...modified from the SO link you have in the answer.
            };

            if(equals(ob1, obj2)){
                // Do what you want to do
            }
        });
    });
};

db.eval(compareCollections);

Con db.eval ti assicuri che il codice venga eseguito sul lato server del database, senza recuperare le raccolte sul client.