I am new to mongo and struggle very much with the following. I have two collections structured as shown below. In my life, I cannot figure out how to do a search in the school collection. While reading other posts, I definitely use ObjectId for reference, as well as for an external field.
Below is my structure:
Alumni:
{ "_id": "john", "items": [ { "name": "John", "items": [ { "school": ObjectId("56de35ab520fc05b2fa3d5e4"), "grad": true }, { "school": ObjectId("56de35ab520fc05b2fa00000"), "grad": false } ] }, { "name": "Johnny" // notice no nested items, this doc should still be included in result }, { "name": "Jon", "items": [ { "school": ObjectId("56de35ab520fc05b2fa11111"), "grad": false } ] } ] }
Schools
{ _id: ObjectId("56de35ab520fc05b2fa3d5e4"), name: "Some University", street: "ABC Boulevard" }
What I want to get:
{ "_id": "john", "items": [ { "name": "John", "items": [ { "school": ObjectId("56de35ab520fc05b2fa3d5e4"), "grad": true, "schoolInfo": { _id: ObjectId("56de35ab520fc05b2fa3d5e4"), name: "Some University", street: "ABC Boulevard" } }, { "school": ObjectId("56de35ab520fc05b2fa00000"), "grad": true, "schoolInfo": { _id: ObjectId("56de35ab520fc05b2fa00000"), name: "Another University", street: "123 Boulevard" } } ] }, { name: "Johnny" }, { "name": "Jon", "items": [ { "school": ObjectId("56de35ab520fc05b2fa11111"), "grad": true, "schoolInfo": { _id: ObjectId("56de35ab520fc05b2fa11111"), name: "Some University", street: "ABC Boulevard" } } ] } ] }
The query I tried to no avail:
db.alumni.aggregate([ {$match: {_id: 'john'}}, {$lookup: { from: 'schools', localField: 'items.items.school', foreignField: '_id', as: 'schoolInfo'}} ])
Any help would be greatly appreciated!