1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
|
/** @page tut_hl_client A full-blown application
*
* As the next step of our tutorial, we will write a full blown
* application. While it does not solve any real-life problems, and
* what it does is entirely pointless, it nevertheless is a good
* example to showcase certain patterns one is likely to run into
* while developing with libmongo-client.
*
* @dontinclude tut_hl_client.c
* @until string.h
*
* Our first task is to add a handful of items to our test
* collection. We'll have two static keys, and one that's different
* for each key.
* @until gint i
*
* First, we'll build a base BSON object:
* @until bson_finish
*
* Then, we create a copy, append a counter element to the object,
* insert it, and do this a thousand times over.
* @until bson_free
* @until }
*
* This was pretty simple, wasn't it? And we even have error handling!
* Lets finish this function up, and move on.
*
* @until }
*
* Next up comes the interesting part: doing queries. We will use the
* @ref mongo_sync_cursor "cursor API" to iterate over all our
* results, hiding the gory details of database access behind its
* convenience layer.
*
* @until {
*
* We'll need a couple of things: a cursor, a query, and a string to
* store error messages in, if any.
*
* @until error
*
* Before we can query the database, we must build a query object:
* @until bson_finish
*
* Once that is done, we create a cursor, cleverly embedding the
* mongo_sync_cmd_query() call into the constructor:
* @until bson_free
*
* Again, we properly handle errors. It is very important to not just
* blindly assume things will work. While the library tries its best
* to handle invalid data gracefully, it's easy to get lost between
* the layers when one forgets to handle error cases at the
* appropriate level.
*
* But I digress, lets get back to our program!
*
* We have a nice little query cursor, it's time to loop through the
* database, extract the counter from the current BSON object, and
* move on:
* @until }
*
* At this point, we have the current document in the @a b variable,
* handled the error case, and as such, we're ready to dig deep into
* the BSON object!
* @until printf
*
* And once we're done working with the BSON object, we free the
* cursor, and the object, and continue the loop.
* @until }
*
* And in the end, we emit a newline, and free the cursor to wrap up
* our query routine.
* @until }
*
* All that is left now, is the glue that holds this together, and
* connects to MongoDB:
* @until }
* @until }
*
* I believe that does not need any further explanation.
*
* As an exercise, one can add another feature: dropping the temporary
* collection on error. Or perhaps, count the number of documents
* returned, and see if and how the count changes between subsequent
* runs of the test program.
*/
|