Database

db={"docs":[{_id:"652be26ec569bba673fa3539",a:[{_id:"652be3616dbd4840c17adf1f",noteIds:["652be3c5090a2b22c1d35a2d","652be3d0ba2da5cb7ddf36ac"]},{_id:"652be3f0d02743f9059e583d",noteIds:["652be401bb0100c78a55ce3a","652be40947bcd5275d272d46"]}],b:{c:{noteIds:["652be47a0994896f73ce4c48","652be481cef028a036e09646"]}}}],"notes":[{"_id":"652be3c5090a2b22c1d35a2d","note":"note 2d"},{"_id":"652be3d0ba2da5cb7ddf36ac","note":"note ac"},{"_id":"652be401bb0100c78a55ce3a","note":"note 3a"},{"_id":"652be40947bcd5275d272d46","note":"note 46"},{"_id":"652be47a0994896f73ce4c48","note":"note 48"},{"_id":"652be481cef028a036e09646","note":"note 46"}]}

Query

db.docs.aggregate([{"$set":{"allNoteIds":{"$function":{"body":"function getNoteIds(obj, out) {for (const ele in obj) {if (ele == 'noteIds') {out.push(obj[ele])}; if ((typeof obj[ele]) == 'object') {getNoteIds(obj[ele], out)}}; return out.flat()}","args":["$$ROOT",[]],"lang":"js"}}}},{"$lookup":{"from":"notes","localField":"allNoteIds","foreignField":"_id","as":"allNotes"}}])

Result