In a medium bowl, mix the beaten eggs and parmesan cheese. Set aside.
In a large skillet over medium heat, cook bacon until crisp. Transfer bacon to a plate lined with paper towels, reserving 2-3 tablespoons of bacon grease in the pan.
To the same skillet, add olive oil and sliced onions. Sprinkle with salt. Cook over medium-low heat for 8–10 minutes, stirring occasionally, until soft and golden brown.
Add mushrooms to the onions and cook for 8-10 more minutes, stirring occasionally, until browned and tender. (Note: Onions should be caramelized; keep cooking if you need to.)
Return bacon to the skillet. Stir to combine, and then remove the skillet from heat.
While the onions and mushrooms are cooking, bring a large pot of salted water to a boil. Add spaghetti and cook al dente (about 8-10 minutes). Turn off the heat. Do not drain the pasta water; you will use it again.
Using tongs, add the cooked spaghetti directly from the pasta water to the skillet with the bacon.
Pour the egg and parmesan mixture into the skillet, constantly tossing with the tongs. The heat from the pasta will cook the eggs, creating a creamy sauce. (Work quickly to prevent scrambling the eggs.) If the sauce is thick, gradually add a bit of the pasta water, tossing with tongs, until the desired consistency is reached.
Garnish with parsley and additional parmesan cheese. Salt and pepper to taste. Serve immediately.