CHICAGO -- Carlos Beltran had a forgettable 2,000th game in the majors on Thursday. His 2,001st might stay with him for a while.
After going 0-for-4 with two strikeouts one day earlier at Wrigley Field, Beltran bounced back Friday with three hits -- falling a home run short of the cycle -- and an RBI to lead the St. Louis Cardinals to a 3-2 win over the Chicago Cubs.
"Yesterday wasn't a good one and today was better, for sure," said Beltran, who had a run-scoring triple, double and single. "That's baseball. Some days you feel like you come to the ballpark and you try and nothing works out your way, and today it seems like everything worked out my way."
Beltran's offense bolstered a second straight spot start for reliever-turned-starter Joe Kelly (1-3), who won his first game of the season.
"I just attacked with everything -- slider, curve ball, change-up, four-seam, two-seam (fastball)," Kelly said. "When you throw a couple of those for strikes, you make it easier on yourself. If you're throwing some off-speed and command both sides of the plate with the heater, it makes for a little better time out there."
It was the second straight start for Kelly, who had a no-decision against Miami last Saturday. He's unsure if he'll get another start soon or will head back to the bullpen.
"I don't look too far ahead about anything," said Kelly, who allowed three hits and a run in 5 1/3 innings, struck out four and walked two. "I go out there and when they tell me to pitch, I pitch. That's what's good about being versatile, and I'm just still happy to be here."
Edward Mujica pitched the ninth for his 26th save in 27 opportunities.
Thursday's 3-0 loss snapped a five-game winning streak for the Cardinals.
"We needed it," Cardinals manager Mike Matheny said of Johnson's clutch hit. "It's a feel-good for a guy who's been doing a lot of things right for us in our system. In a situation, he helped us produce and we wound up getting a run out of it."
The Cubs cut St. Louis' lead to 2-1 in the third. Luis Valbuena walked, went to second when Starlin Castro was hit by a pitch, Anthony Rizzo hit into a fielder's choice that pushed Valbuena to third and then Alfonso Soriano's single scored Valbuena.
After Carpenter's double scored Johnson in the seventh to make it 3-1, Castro closed the score to 3-2 with a leadoff homer in the eighth -- but the Cubs would get no closer, stranding seven runners in the game.
Even with Villanueva's shaky first inning, Cubs manager Dale Sveum still liked what he saw from his starter.
"Six innings, 90 pitches, obviously settled down after the first inning," Sveum said. "Everything got much sharper and he did a great job."
The Cubs are 12-8 in their last 20 games, and are 3-5 against St. Louis this season. They faced the best team in baseball for the second straight week. Last weekend, they took two of three from Pittsburgh, which had the best record in the majors at the time.
Cardinals LF Matt Holliday was held out Friday with right hamstring tightness and is day-to-day. ... In addition to signing first round draft pick Kris Bryant, the Cubs also inked 12th round RHP Trevor Clifton and 19th round C Will Remillard. ... Saturday's pitchers will be the Cardinals' Lance Lynn (11-3, 3.67 ERA) and Matt Garza (5-1, 3.22). Garza has been the subject of trade rumors in recent days. "He's obviously throwing extremely well and he's very healthy and there are teams out there looking for pitching who are going to call and try to acquire him," Cubs president Theo Epstein said before Friday's game. "He's helping us win games right now, there's a chance to possibly retain him beyond this year, so we'll just balance all that out and do what's best for the organization." ... The Cubs have used 42 players this season, a pre-All-Star break team record. ... The Cubs came into Friday's game leading the National League with 293 extra-base hits.