|
|
00:00 Next step we worked with— PyMongo.
|
|
|
00:02 So we put our Javascript away, we said all right enough with the Javascript stuff,
|
|
|
00:05 we're going to write in Python basically for the rest of this course.
|
|
|
00:08 So the lowest level way to talk to MongoDB from Python is with PyMongo.
|
|
|
00:13 So let's look at a couple of the crud operations here.
|
|
|
00:16 We'll start of course by importing the package, import PyMongo,
|
|
|
00:20 and if you don't have it just pip install it;
|
|
|
00:22 and then we need to create a Mongo client by passing a connection string,
|
|
|
00:26 I believe if you actually get a hold of the PyMongo connection
|
|
|
00:29 you can use it directly, but you should not, because the Mongo client handles
|
|
|
00:34 reconnects and connection pulling is stuff like that
|
|
|
00:36 whereas the connection itself wouldn't do those kinds of things.
|
|
|
00:39 Then if we want to work with the database,
|
|
|
00:42 we have this sort of interesting highly dynamic api,
|
|
|
00:46 we go to the client and we just say . (dot) the name of the database
|
|
|
00:49 so we say client.the_small_bookstore, and we assign that to db
|
|
|
00:54 so it looks like the rest of the shell stuff that we have been doing,
|
|
|
00:57 but technically that's optional.
|
|
|
00:59 This database doesn't even have to exist,
|
|
|
01:02 we could create the database in this style just by doing our first insert into it.
|
|
|
01:05 Whether or not it exists, we get all the database
|
|
|
01:08 and now we can operate on the collections.
|
|
|
01:11 Let's imagine that in that database there's a collection called books
|
|
|
01:15 and we want to know how many of them are,
|
|
|
01:17 we would just say db.books.count
|
|
|
01:20 and that would actually go there and do this operation.
|
|
|
01:22 If it happens to be that either the database of the collection doesn't exist,
|
|
|
01:25 it doesn't crash, you get zero.
|
|
|
01:27 We could also do a find_one, this line here is notable
|
|
|
01:31 because in the Javascript api is findOne
|
|
|
01:34 and they've made a pythonic version here, so find_one
|
|
|
01:39 just be aware that it's not always a one to one
|
|
|
01:42 exact verbatim match from the native query syntax over to PyMongo.
|
|
|
01:46 We can also do an actual search,
|
|
|
01:50 before we said find_one I basically got the first
|
|
|
01:54 here we're going to say I want to find a book by isbn, I want to pass it over,
|
|
|
01:57 here we use Python dictionaries
|
|
|
01:59 which play the role of those prototypical json objects.
|
|
|
02:01 We also insert new data, so here we're going to say
|
|
|
02:06 insert this thing which is a dictionary, it has a title called new book
|
|
|
02:10 and an isbn of whatever is written there and we get back this result,
|
|
|
02:15 the result will have this object id in the field inserted _id,
|
|
|
02:20 we can go requery it and do all sorts of stuff with it.
|
|
|
02:23 Basically when we say insert one, we get this result
|
|
|
02:26 which, if it succeeds has the inserted id.
|
|
|
02:29 Now these are the straightforward crud operations,
|
|
|
02:31 we can also use our fancy in place operators,
|
|
|
02:34 so here let's just insert this book, so we see what we get,
|
|
|
02:36 and we grab a hold of the inserted id,
|
|
|
02:38 and now suppose we want to add a field called favorited_by,
|
|
|
02:43 and this is going to be a list, and we want the list to be basically distinct
|
|
|
02:47 we're adding the ids of the customers or people visiting our site
|
|
|
02:50 who have favorited in this book, and we'd like to put them in there
|
|
|
02:54 but there's no reason to have them in there twice,
|
|
|
02:56 that can cause all sorts of problems.
|
|
|
02:58 We're going to use the dollar add to set, so we run this,
|
|
|
03:01 run it again for 1002, and hey we could run it a second time for 1002,
|
|
|
03:05 and what we'll end up with is an object that looks like this,
|
|
|
03:08 the two things we inserted, the generated_id
|
|
|
03:11 and his favorited_by list which has 1001 and 1002.
|
|
|
03:15 Definitely keep in mind these in place operators
|
|
|
03:19 because they're very powerful and they leverage some of the special properties
|
|
|
03:23 of the way MongoDB treats documents atomically. |