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.