I'm attempting to query all data from the errorlog collection, and in the same query grab a count of relevant irs_documents for each errorlog entry.
The problem is that there are too many records in the irs_documents collection to perform a $lookup.
Is there a performant method of doing this in one MongoDB query?
Failed attempt
db.getCollection('errorlog').aggregate(
[
{
$lookup: {
from: "irs_documents",
localField: "document.ssn",
foreignField: "ssn",
as: "irs_documents"
}
},
{
$group: {
_id: { document: "$document", error: "$error" },
logged_documents: { $sum : 1 }
}
}
]
)
Error
Total size of documents in $lookup exceeds maximum document size
Clearly this solution won't work. MongoDB is literally attempting to gather whole documents with $lookup, where I just want a count.
"errorlog" collection sample data:
/* 1 */ { "_id" : ObjectId("56d73955ce09a5a32399f022"), "document" : { "ssn" : 1 }, "error" : "Error 1" } /* 2 */ { "_id" : ObjectId("56d73967ce09a5a32399f023"), "document" : { "ssn" : 2 }, "error" : "Error 1" } /* 3 */ { "_id" : ObjectId("56d73979ce09a5a32399f024"), "document" : { "ssn" : 3 }, "error" : "Error 429" } /* 4 */ { "_id" : ObjectId("56d73985ce09a5a32399f025"), "document" : { "ssn" : 9 }, "error" : "Error 1" } /* 5 */ { "_id" : ObjectId("56d73990ce09a5a32399f026"), "document" : { "ssn" : 1 }, "error" : "Error 8" }
"irs_documents" collection sample data
/* 1 */ { "_id" : ObjectId("56d73905ce09a5a32399f01e"), "ssn" : 1, "name" : "Sally" } /* 2 */ { "_id" : ObjectId("56d7390fce09a5a32399f01f"), "ssn" : 2, "name" : "Bob" } /* 3 */ { "_id" : ObjectId("56d7391ace09a5a32399f020"), "ssn" : 3, "name" : "Kelly" } /* 4 */ { "_id" : ObjectId("56d7393ace09a5a32399f021"), "ssn" : 9, "name" : "Pippinpaddle-Oppsokopolis" }