Okay, so let's take this a step further. This is exactly the same pipeline that we looked at in the previous lesson. The difference is that we're now going to begin to do a little bit more sophisticated work within our project stage. In order to handle some other problems with the data in this particular data set. So here you can see the same pass throughs and these split operations again. But for released, if we take a look at what we have for values in this collection, it's just a string. We can do quite a bit more in terms of range filters, searching for all movies released at a particular time of year, in a given month etcetera, if we actually convert these to dates. So that's what we're doing here. Let me explain this a little bit. If it wasn't for the case that values could be empty, this would be significantly simpler. We would simply need to use date from string operator to parse the date out of the string. But because we can have empty strings as the value for released, we need to use the cond operator. Cond is simply a conditional expression. We have an if, then, and an else. Because everything is document based in MongoDB, we express this using this document based syntax. So the cond operator has as its value a document, and that document has three keys within in it: an if, a then and an else. For if, we specify a conditional expression, and the conditional expression we're using here is making use of this dollar ne operator. $ne simply means not equal to. $ne expects an array as its value where we have two values to be compared. Here we're using this field path specifier to get the value for released. And we're simply saying, if that value is not equal to the empty string, then we want to go ahead and parse the string from it. Otherwise, just go ahead and let released equal the empty string. Let's talk a little bit about the meat of this particular reshaping, which is really parsing the date out of a string. $dateFromString is an operator that expects us to specify the value we want to parse as an expression that evaluates to a string. Here we're using a field path specifier, so whatever the current value for released is. And we have to specify that as the value for dateString, there are some other options you can specify to date from string. We're not going to talk about those right now. But that's why this has the structure that it does. The result here is that, if the expression is true, then the value that will be assigned to the release key, in this projection, is the date value parsed using the dateFromString operator from the current string representation of that date, which is the current value of the released field. Otherwise, we simply make released have the value of the empty string. Again, as we build up this reshaping, we're just looking at the first 100 documents and we are again outputting to the movies_scratch collection. So let's run this. And if we go into Compass and refresh, we see that now we have a real timestamp as the value for released for all documents that actually had some sort of string representation as their value. For others, we'll just have the empty string. But we can see several here that have had their released field updated to have a real time stamp, which we can then filter on in a variety of interesting ways. So that's an example of how we can do a little clean up with respect to dates. Now, one other thing that I want to point out is dateFromString is an aggregation operator that is only available in MongoDB 3.6 and later. So, if you're using an earlier version of MongoDB in your atlas cluster, or in say a local installation that you have created, you'll need to upgrade to MongoDB 3.6 in order to take advantage of this particular operator.