migrating-ravens / RavenMigrations

A small migrations framework to help you manage your RavenDB Instance.
MIT License
53 stars 24 forks source link

Modify metadata during document migration #5

Closed seankearon closed 11 years ago

seankearon commented 11 years ago

Alter.Collection now allows direct access to metadata, as follows:

public class AlterCollectionMigration : Migration
{
    public override void Down()
    {
        Alter.Collection("Person1s", MigratePerson2ToPerson1);
    }

    public override void Up()
    {
        Alter.Collection("Person1s", MigratePerson1ToPerson2);
    }

    private void MigratePerson2ToPerson1(RavenJObject doc, RavenJObject metadata)
    {
        var first = doc.Value<string>("FirstName");
        var last = doc.Value<string>("LastName");

        doc["Name"] = first + " " + last;
        doc.Remove("FirstName");
        doc.Remove("LastName");

        metadata[Constants.RavenClrType] = "RavenMigrations.Tests.Person1, RavenMigrations.Tests";
    }

    private void MigratePerson1ToPerson2(RavenJObject doc, RavenJObject metadata)
    {
        var name = doc.Value<string>("Name");
        if (!string.IsNullOrEmpty(name))
        {
            doc["FirstName"] = name.Split(' ')[0];
            doc["LastName"] = name.Split(' ')[1];
        }
        doc.Remove("Name");

        metadata[Constants.RavenClrType] = "RavenMigrations.Tests.Person2, RavenMigrations.Tests";
    }
}
khalidabuhakmeh commented 11 years ago

Looks really awesome. Thanks again.