‫Let's now start creating documents,
‫testing the model, and really start using Mongoose.
‫And I'm really excited about this video,
‫so really let's get started here.
‫So what we're gonna do is to create a new variable,
‫and I'm gonna call it testTour,
‫and this will be a new document
‫created out of the tour model
‫that we created in the last lecture.
‫So what we're gonna do
‫is to say new Tour,
‫and then in there pass an object with the data.
‫So name, let's say,
‫again, 'The Forest Hiker,'
‫just as we've been using before,
‫then the rating, let's say 4.7,
‫and then the price,
‫let's say 497, okay?
‫So, this is, again, a new document
‫that we created out of a tour model,
‫or function constructors,
‫and so as I said before, this is kinda
‫using JavaScript function constructors,
‫or JavaScript classes if you're using ES6,
‫basically to create new objects
‫out of a class, right,
‫and so that's exactly the same syntax, actually,
‫so we use the name keyword,
‫and then the class name in ES6,
‫just like this, all right?
‫Now here, it's not exactly the same,
‫but this analogy is helpful
‫to understand how this works.
‫So this test tour document that we just created
‫is an instance of the tour model,
‫and so now it has a couple of methods on it
‫that we can use in order to
‫interact with the database.
‫So let me show that to you.
‫So we can now say testTour.save,
‫and this will then save it to
‫the tours collection in the database, okay,
‫and it's really as simple as that.
‫So again, we have our document instance
‫which is testTour, and on there
‫we can then call the save method
‫in order to save the document to the database.
‫Now this save here will then return
‫a promise that we can then consume.
‫So for now, let's use then for that,
‫and in the future, we will actually use
‫async await in order to consume these promises,
‫but for now, let's keep it simple
‫and not create any more functions,
‫and so instead, we're just using
‫the then method here.
‫So in here, we get access to the document
‫that was just saved to the database.
‫So, basically, the result value of the promise
‫that the save method returns is
‫the final document as it is in the database.
‫And so let's now actually go ahead
‫and log the document to the console, all right?
‫Now, on the other hand, saving this document
‫to the database might also go wrong,
‫and so let's catch that error, okay?
‫So just like before, we used the catch
‫method in order to catch any potential errors,
‫and so if there is an error when
‫saving the document to the database,
‫we will be able to catch that error
‫here in this method.
‫Okay, so basically, here in this function
‫that I'm passing into catch.
‫Okay, for now, all I wanna do, really,
‫is to also log it to the console.
‫Let's say, 'Error,' add some emojis here
‫to make it more visible in the console,
‫and then we can pass in a second argument
‫into the console log, which will
‫then be the error, okay?
‫Are you ready?
‫Then, let's give it a save now,
‫and that will then execute the code that is in here,
‫so basically create this new tour, and try to save it
‫to the database right away, okay?
‫So, let's give it a save now,
‫and see what happens in the console,
‫and indeed, here we go.
‫So you see, that this is the document
‫that was just saved to our database, all right?
‫So here we actually see the ID as well,
‫and that is simply auto-generated by MongoDB,
‫and it's simply the unique identifier for the document.
‫So just like it happened before in the MongoDB section,
‫we automatically get this unique identifier
‫for the new object.
‫Then Mongoose also automatically adds
‫this V, and set it to zero here,
‫but that's not really important at this point, okay?
‫What matters here is that our new document
‫was actually successfully added to the database,
‫and just to make sure, let's actually move over
‫to Compass and take a look at our database there.
‫So here, we have the tours collection,
‫and then we have the document that we just created.
‫So it has that exact same ID, and of course
‫all the other data that we put in there,
‫and so indeed, this is the object
‫that we just created.
‫And keep in mind that we had actually deleted
‫the tours collection here in one
‫of the previous videos, right,
‫but Mongoose automatically created
‫this new collection here as soon
‫as we created the first document
‫using the tour model,
‫and so this name here basically
‫comes from that tour model, it simply
‫gives us this plural name, just as we had before.
‫Perfect, we just made our express application
‫really interact with a MongoDB database
‫for the very first time,
‫and that's actually really amazing, if you ask me.
‫So this means that right now,
‫we are able to create documents right from our code.
‫So, that makes me really happy,
‫and so let's actually try it again
‫with another one, all right,
‫but actually before we do that,
‫I want to just reload this file here
‫which will then try to save this document here
‫to the database again, right,
‫simply because all this code here is run
‫each time that we save the file.
‫Now, let's try to guess what is gonna happen
‫as soon as I save this file.
‫Can you guess?
‫Let's wait for it,
‫and indeed we get something different now,
‫we get an error here,
‫and the error that we see is this
‫duplicate key error collection,
‫which down here says this duplicate key, okay?
‫So we already have a tour with the name
‫of 'Forest Hiker,' and so now we were
‫trying to create another one,
‫and since in our schema we have this
‫unique property here, that is not allowed,
‫remember that?
‫So we set this unique here to true
‫in order to make it impossible
‫to have two tours with the same name,
‫and so we just proved that this is actually working.
‫All right, so let's simple replace
‫the code that we have here
‫in order to create a new tour with another name.
‫Let's call it 'The Park Camper,'
‫and let's go ahead and remove the price
‫and also the rating.
‫So, can you guess what's gonna happen now?
‫Let's actually clear, or actually it
‫already loaded it because as soon
‫as I clicked here, it then saved the file,
‫and so, yeah we just got another error,
‫so you can see that up here,
‫meaning that we didn't successfully save
‫this document to the database,
‫and what we got here now is a validation error
‫coming from the price field
‫saying 'A Tour must have a price,'
‫and so that is exactly the message
‫that we specified up here, right?
‫Simply because in this line we said
‫that the price is a required field, all right,
‫and so this required, as I mentioned,
‫is a validator, and so down here,
‫we then get a validation error.
‫And so let's now fix that
‫and specify the price, let's say 997,
‫and give it another save.
‫Now this time, it should work
‫because the rating is not required,
‫and so when we come down here,
‫our document was actually successfully
‫saved to the database, you see?
‫Now, we didn't specify the rating here
‫in this test tour, but you see it's still 4.5,
‫and that is because we set
‫the default to 4.5 up here.
‫So I just wanted to show you
‫that here in this quick example.
‫Okay, so we were successful again,
‫so let's come back here, reload,
‫you're clicking this button, and indeed
‫we now get our two tours.
‫Great, and I remember how amazing it felt
‫for me when this worked the first time
‫when I was starting to learn Express and Mongo,
‫and how to build these applications,
‫and so I really hope that you're
‫feeling the same way right now,
‫as you just created your very first
‫documents using Express
‫and, of course, MongoDB.