Hi Kevin,
I'm sorry to hear (and see) that you haven't gotten much help on the Julia mailing list. It's probably just that your request hasn't fallen on the ears of anyone who has interest in both Mongo and Julia and the time to help. I'm almost in that category, in that I have a small interest in Mongo (and a lot of interest in Julia), but only so much time.
I will say that once you get something working, the mailing list will usually be a good resource, but it works best if you have specific questions or problems (e.g., I'm trying to do this with the following code, but it's not working--what am I doing wrong) vs. general requests (e.g., asking for help wrapping mongo with a mostly empty repo).
I'm assuming this is your first major Julia project? If so, my first suggestion is to ignore everything written below (for now), and try to get the Mongo.jl library running on a modern Julia first, and make sure you understand everything that it's doing. Only after that would I try anything below.
----
In truth, I don't know the best way forward, but I can give you a little more information, and maybe it will help you decide.
Clang.jl is a general framework for wrapping C libraries. It's never necessary--any C library can be called directly using ccall. But ccalls can be kind of clunky, so Clang.jl provides an API which very closely mimics the C API provided in some header file: functions have very similar signatures, and structs become julia types. For a large library with lots of functions, or complicated structs with lots of members, this can make wrapping relatively easy.
While the output of Clang.jl is usually reasonably nice, it's still a very low level of abstraction. Actually, very little abstraction, because it matches the C library, which is usually very low level, and still somewhat inconvenient in Julia (but more convenient than ccalls). To be useful, you'll often want to add a higher level API on top of that, which adds functions and/or types that encompass or simplify the lower level calls.
It's also often the case that Clang.jl doesn't give you exactly what you need--e.g., it doesn't know how to wrap certain things, such as unions and C macros. In those cases, you'll have to edit the output by hand, or spend some time programmatically filtering/modifying the results. I do this a bit in the
wrapper for VideoIO (and I still have to edit some files by hand at the end).
The main alternative is to wrap a subset of useful functions by hand (or simply use ccall directly, which amounts to pretty much the same thing). This is probably closer to what the Mongo folks had in mind when they directed you to the Lua driver. If you only need access to a few functions, or if your code is highly specialized in a way that Clang.jl has trouble with, wrapping by hand can be the way to go. For this, you're basically writing Julia functions which ccall out to external library functions (such as those in mongo), and returns the result (or some modification thereof that matches what would normally be done in Julia).
Hopefully this was useful. Please feel free to post back here with questions, and I (and maybe others, if the question is right) will try to answer as we have time.
Cheers!
Kevin