You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

114 lines
7.4 KiB
Plaintext

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

00:01 So we've really explored a lot of MongoEngine
00:03 and we've built upon the foundation that we laid with the Javascript api
00:07 and transferring that over to the PyMongo api;
00:11 so hopefully, nothing you've seen has surprised you
00:13 in terms of the types of queries that we're doing,
00:16 it's just learning how MongoEngine surfaces that and turns it into objects
00:20 was really what we were looking for;
00:22 now, there are a few other things that we need to talk about
00:25 that really we haven't touched on yet,
00:28 the operators, we talked about the atomic update operators
00:32 but not things like the greater than, less than, exists, doesn't exist,
00:36 in set and so on, so we want to look at that;
00:39 we also want to look at querying into subdocuments
00:44 so if we go back to our MongoEngine here, we'll run this one more time,
00:48 see, maybe we want to ask questions like
00:51 show me the cars that have had some either really good service or really bad service,
00:57 so we want to query all the way down into service history,
00:59 into customer rating, and do a question like
01:02 show me the ratings that were 5, show me those the ones that were 4,
01:05 show me the ones that are less than 3, things like that,
01:08 so how do we do this in this format that MongoEngine uses?
01:11 So I've sketched out this little 'show poorly serviced cars'
01:14 and it doesn't do anything, it just pulls back every car
01:17 and prints it more or less like we had before,
01:19 except for it shows the satisfaction in addition to the other stuff;
01:22 so the question is how do I query it, let's just run it real quick,
01:25 and I can say show me the poorly serviced cars,
01:28 it doesn't matter what we put now, and it literally just lists all of them,
01:31 and notice this one has a satisfaction of 3, 3, 5 and 3,
01:34 so that we can do some queries, let's work on two other cars,
01:38 let's work on the Ferrari 308 and this 2017 F40.
01:42 So let's perform some service on this one
01:46 and let's say this one got some amazing service, the price was 12 dollars,
01:52 and we have a let's say monthly check up again here
01:57 spelled right even, and they were just thrilled,
02:01 so let's do our list really quick, and now, notice this one had a very happy one
02:07 in fact, if I say the poorly serviced cars for a moment
02:11 it's going to show that this one had a satisfaction of 5,
02:15 okay let's suppose the 308 is not having such a good day, let's service it,
02:19 and let's say that its price was 10 thousand dollars,
02:23 the type of service was fender dent repair,
02:27 so maybe the family went out of town and the teenage son stayed home,
02:31 the son took the Ferrari out, found the keys and crashed it,
02:35 so you can't blame the guy for being unhappy,
02:38 but you know, what are we supposed to do, he came in unhappy,
02:41 we tried to make him happy, but he was just not having it, so he had a 1,
02:44 and now let's look really quick, just list everything still,
02:48 so you can see over here, this Ferrari has no records,
02:52 this one, this F40 2017, was very satisfied,
02:56 the 308 very unsatisfied, and this Testarossa has some that are satisfied.
03:01 Okay, so great, now we have the right variety of data,
03:05 let's go over here and write the code that we were trying to write in the first place.
03:09 What I want to do is I want to find the cars that had great service,
03:12 so that's pretty easy to do, we saw that we could do like
03:15 vi_number = 7, but what about, over here—
03:20
03:25 remember what we want to do, find the one with lots of them,
03:29 we want to go into service history and down into service history,
03:33 we want to find customer rating, how do we do that in this format?
03:36 Well, it starts with this, service history, and what's the thing called down here,
03:41 just do a copy to be sure it's identical,
03:44 because you don't get an error if you get it wrong, just no results.
03:46 So I told you that double underscore has special meaning
03:48 we used it for the push operator earlier,
03:51 we can also use it here to traverse the hierarchy,
03:55 so service_history_ _customer_rating
03:57 is going to go down and let's say this is going to match
04:00 whatever level they passed in, all right, let's try this.
04:03 So I want to find poorly service right now it assumes
04:09 that we're going to enter a low number, but let's just run with it for a minute,
04:12 let's say I want to find the ones with level 1,
04:15 all right, so it was this Ferrari 308 here,
04:18 and I think that's the only one that has level one,
04:21 let's go and run the poor but ask for 5,
04:24 so like I said, bad name, servers at a level or whatever;
04:28 now we have two, right, we have this Ferrari F40 with this here,
04:32 and we have the Testarossa, which some of the time
04:36 at least had really good service, the person was super thrilled.
04:39 So that's how we search into those subarrays, we used the double underscore,
04:45 so double underscore we used it for push onto a thing,
04:48 we use it to navigate a hierarchy,
04:50 the last thing that we really are looking for is
04:53 we would like to find the cars that say have
04:55 below excellent service or something like that,
04:58 so let's change this a little bit, max level of satisfaction are we looking for;
05:07 so we could say 1 and that's a really bad one,
05:09 if we could say 3, and we could intend that to be 1, 2 or 3, as the level, right,
05:14 so it's not going to work this way now, it's just going to be straight up a quality.
05:18 So, once again, how do we do it in the Javascript api or PyMongo—
05:24 we would use something like this, we would say that,
05:27 we would say service_history.customer_rating
05:38 and then here instead of giving a number we would give it one of those operators,
05:44 we would say $ lte (less than or equal to) : level, right
05:49 so how do we do that here— well, we want to use this operator
05:55 and we're going to do that again with the double underscore,
05:58 so we'll say double underscore __lte,
06:00 but here's the thing, the query operators go on the end,
06:03 the update operators go on the beginning, remember push was like this
06:07 so the order varies, for better or worse,
06:10 I think it has to do with the fact that the operators here go to the right in the raw api,
06:15 and the push one goes to the left, so it's kind of trying to mirror that.
06:19 All right, let's run this again. So let's see the poorly serviced cars,
06:25 let's try again for 1, we should see just the 308
06:27 because that's the only one with that level, boom, there's the 308.
06:31 Let's look for it again, I want to find all the cars with 3 or below,
06:35 remember, if I scroll this up a little bit, we're doing lte less than or equal to 3,
06:40 bam, look at that, we got the 308 and we got the Testarossa,
06:45 which some of the time did have this, all right,
06:47 if I put 5, we would just get all of them.
06:50 So you can see that we can use the double underscore to traverse the hierarchy,
06:53 we can use the double underscore for the operators,
06:55 and in fact, we can use the double underscore for multiple meanings
06:58 in the exact same thing, right here, traverse service_history.customer_rating
07:04 and then apply the operator less than or equal to the value that we set.