This approach actually works fairly reliably for me upon testing against 10.11:
https://superuser.com/questions/229773/run-command-on-startup-login-mac-os-x#answer-229792
It doesn't solve all permission issues with running something as one user (root, for example) at or before the login screen, but if you can figure that out, it does run by the time the login screen is shown, and seems to work reliably after login, which is what you've actually asked for.
Copying here as even though the answer is also an answer to this question, the two questions are different:
From user 'Scott'...
To run a command on start up on OS X, you need to use launchd.
If you don't want to use Lingon, you need to create a launchd Property List. This is an XML file, so you can do it with your favourite text editor or alternatively you can use the Property List Editor that's installed with the Mac OS X Dev Tools. Create the following:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>some.meaningful.name</string> <!-- org.mongodb.mongodb perhaps? -->
<key>OnDemand</key>
<false/>
<key>UserName</key>
<string>anAppropriateUser</string>
<key>GroupName</key>
<string>anAppropriateGroup</string>
<key>ProgramArguments</key>
<array>
<string>/Applications/MongoDB/bin/mongod</string>
<string>--dbpath</string>
<string>/usr/local/mongo/data</string>
<string>--fork</string>
<string>--logpath</string>
<string>/usr/local/mongo/log</string>
</array>
</dict>
</plist>
Save this in /Library/LaunchAgents/some.meaningful.name.plist (you will need an administrator account and/or sudo), then open a terminal and do:
sudo launchctl load /Library/LaunchAgents/some.meaningful.name.plist
This will cause launchd to load the item which will cause it to start MongoDB on boot. As a bonus, launchd will monitor it and, if it exits for any reason, it will be re-started. To get rid of the item simply replace load in the above command with unload.
From user msanford...
This will attempt to run the application every 10 seconds, which works well for services that don't die. If this is for a script that runs once punctually (in my case, messaging once Slack on reboot) add <key>LaunchOnlyOnce</key><true/> to the dict.