Mongodb C++ finding 1 value with BSON filter
I spent over 8 hours debugging this code and finally got some help on the mongodb IRC chat room. Hacking through this code was a nightmare and hopefully posting it here will alleviate many headaches for all. The documentation is so lacking sometimes but I guess that is why we have blogs like this!
So I want to get the last value inserted based on a filter(hostName) and the special _id field built into mongodb. This is how I did it:
So I wrote this:
void Database::getLastRecord(string hostName)
{
//default variables
string lastLine;
BSONObjBuilder b;
//build your BSON object filter:
b.append("hostname", hostName);
BSONObj p = b.obj();
//execute your query
mongo::BSONObj last_element = mongo.findOne("logs.ip",
mongo::Query(p).sort("_id", -1));
//now make sure your BSON object isn't empty
//Also tell the BSON object which value you actually want with .getFiled() you can also use .toString() for the whole BSON object
if (!last_element.isEmpty())
{
cout << last_element.getField("linenum") << endl;
cout << last_element.toString() << endl;
}
}