Estoy usando getSibling para lograr esto y no estoy seguro de si esta es la única forma de intentar no usar $nin al escribir el script de shell mongodb. empiezo con esto
//This runs for a 8-10 mins for 4Million docs db = db.getSiblingDB("a") akeys = db.getCollection("colla").aggregate([ { $group: { _id: "$_id" } } ]).toArray() akeysarray = akeys.map(item => item._id) ['abc','a','d','erdfs',.......'anvdf']Cambio de base de datos y hago lo mismo
db = db.getSiblingDB("b") bkeys = db.getCollection("collb").aggregate([ { $group: { _id: "$_id" } } ]).toArray() akeysarray = akeys.map(item => item._id) ['abc','a',.......'anvdf']Luego recorro con Vanilla JavaScript porque es la única forma en que puedo lograr esto en mongosh, pero esta es mi área problemática. Necesita 5000 elementos por minuto y funcionará aproximadamente a las 16 horas durante la noche.
difference = []; arrays = [] size = 250000 // I have to splice the list of comparing arrays by 250000 // because it is very slow while (bkeysarray.length > 0) arrays.push(bkeysarray.splice(0, size)) difference = [] for (var idxo in arrays) { for (var idx in arrays[i]) { print("checking array set" + idxo + " with index " + idx + " and value " + arrays[idxo][idx]) var value = arrays[idxo][idx]; if (value == akeysarray[idxo]) { continue; } if (akeysarray.indexOf(value) == -1) { difference.push(value); } } }Esto devolverá 28K elementos en una matriz y quiero usar esto en una declaración $in para usar la indexación para encontrar.
Avíseme si hay otra forma de lograr una comparación de _id de base de datos cruzada que sea más eficaz que esta que solo se puede ejecutar en mongosh debido a las limitaciones del entorno con el cliente. Soy consciente de que se puede hacer con un controlador en menos de unos segundos, pero solo puedo ejecutar este script en mongosh.