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.

108 lines
7.0 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 have the primary properties of our car modeled,
00:04 they have their required fields, they have their default values, things like that.
00:08 We still maybe want to consider indexes
00:10 but we're saving that for a performance area.
00:12 The next thing we want to look at is the engine, and the embedded elements.
00:16 We talked about at the beginning that the car is going to have an engine,
00:20 and it's going to be equal to something,
00:22 not a string or a float or something like that,
00:25 but in fact, to an entire subclass, right,
00:28 a class that represents engines in particular,
00:30 so let's create that class and then we'll come back to the car.
00:33 So if we come over here, I'm going to create something called engine
00:37 and just like before, we are going to import MongoEngine,
00:41 not the same engine, right, class engine
00:44 and this is going to derive from MongoEngine document,
00:46 now, before I said document has the id
00:49 and this is like the top level thing that allows saving and loading,
00:51 so we don't use this type for embedded documents, subdocuments,
00:56 right, subdocuments don't necessarily have ids,
00:58 you don't load query and save them etc independently,
01:02 you can only work with them through their parent document,
01:05 so in this case, we are going to say this is only allowed as an embedded document
01:08 it can't be queried or saved directly, but it can be used
01:11 as a subelement of another type, like for example our car.
01:17 So let's go over here, and give our engine a couple of properties,
01:20 we're going to give it the horsepower
01:23 and the horsepower is going to be a mongoengine.integer,
01:28 so this is going to be an int field, it is going to have a leaders
01:31 so the size of the engine and this will be mongoengine float field
01:35 because it could have like 2.3 liter engine something like that;
01:40 we'll have the mpg, so miles per gallon,
01:44 and this is going to be the same thing, a float,
01:46 finally it'll have a serial number, and this is going to be a mongoengine string field.
01:55 And the serial number is kind of like the vin number,
01:58 but in fact it's not exactly the same, it's going to be having dashes
02:03 it will have a slightly different format, but let's go ahead
02:05 and work on some of the default values in that,
02:08 so we're going to import uuid, I am going to use just again uuid
02:12 to actually generate this so quick review, default is a lambda,
02:16 and the lambda is going to return a string representation of uuid4,
02:22 I believe the dash is in there this time, just to make sure
02:24 hey this is clearly not a vin number, it's a serial number.
02:28 And let's set these all to be required, so we can have in the subdocument itself
02:34 these required values, except for the serial number,
02:36 which is going to be autogenerated;
02:38 all right, so let's go back now that we have this not a document
02:41 but a subdocument, an embedded document, let's go back to the car
02:45 so in the car what am I going to set this to, a MongoEngine something,
02:48 right so this is not going to be a string or float or anything,
02:52 it's going to be an embedded document field,
02:54 right, so we have an embedded document list field or just a field
02:58 so this is a single engine, not a list of them, so here it goes like that
03:02 and then I need to tell it not just what goes in there, but the document type
03:06 what is the subdocument, the subdocument is actually this,
03:09 and then let's go ahead and say required = true
03:12 so we could even say that this subdocument cannot be
03:15 none or null in Javascript, it has to be set to a thing.
03:18 So, we're going to import the engine, so it knows the car,
03:22 it knows about the engine and it can save it there,
03:25 all right, let's try to work with our engine here and see what happens.
03:28 Okay, it runs, that's already pretty encouraging,
03:31 so the model is going to be the Testarossa,
03:34 I'm sure that's misspelled but we'll roll with it,
03:36 Ferrari, it was built in 2010 and this is going to crash
03:41 because the engine was not specified, how do we do that,
03:44 well let's jump right where the problem is and find out.
03:48 So we need to set the engine, now I'm just going to hardcore engine setting
03:52 so we don't ask this anymore, right, so we want to come over and say
03:56 allocate an engine, allocating it is just the same as the top level item
04:01 we'll say engine.horsepower is around six hundred horsepower,
04:04 that's pretty insane isn't it, we have the miles per gallon,
04:08 I think that's around 20, not super high, liters let's say 5.0
04:17 it's not exactly right, I'm sure but close enough;
04:20 and then we just say car.engine is engine, like this,
04:24 so we create this object and we associate it,
04:26 and then later we can say car.engine. and we get all the various things here.
04:30 Okay, so here we have our car, we set the engine and now let's do this again;
04:35 in fact, let me just comment this out a little bit,
04:40
04:42 yeah, we'll just ask those two questions, keep it little simpler.
04:45 Ok so we're going to add a car, the model is Testarossa,
04:49 don't think we have one yet, let's open up our shell,
04:53 we have the couple F40s and the 308, but no Testarossa,
04:59 2005, and boom, inserted, okay let's run this again.
05:06 Where did it go, oh there it is, check that out how awesome is that!
05:10 So we have our Testarossa 2008, the mileage defaulted to zero,
05:14 the vin number was autogenerated, now here we have our engine
05:18 and check this out, here is our subdocument
05:21 curly brace means object subdocument in json
05:24 so we have horse power 600, liters are 5,
05:26 miles per gallon is 20, serial number is such and such,
05:30 let's go and make a quick change here so we can ask some interesting questions,
05:34 let me make this 22, this is a more efficient version
05:38 and it only makes 590 horse power, okay let's just insert one more.
05:43 So we're going to add what model, so let's say 355
05:47 is that a thing, I'm not sure, 2000, like so.
05:51 So if we go over here and run this, now we have these two
05:57 that have engines, this one has a 590 and so on,
06:00 so we can actually go over here and ask interesting questions
06:03 like I want all the cars with an engine where,
06:06 let's go for liters, is we can say something like $ > what value, say 5.95
06:15 and of course, got to close everything off,
06:19 what did I miss— I missed something didn't I, because it didn't come back,
06:24 horse power could be that much or liters could be something much smaller
06:28 so here, horsepower this much, or liter, I could have done 4.5,
06:33 there you go, so now you can see that we can query down into this subdocument
06:37 but it's going to get more interesting when we start doing queries with MongoEngine,
06:40 because we want to get these rich objects back.