Porting MVC Music Store to RavenAdvanced Migrations
I noticed that I had typo when I inserted the albums data, the artist data was stored as “Arist”. This give me a chance to show you how we can do a migration that is a bit more advanced.
using (var documentStore = new DocumentStore { Url = "http://localhost:8080" }) { documentStore.Initialise(); var count = 0; do { var queryResult = documentStore.DatabaseCommands.Query("Raven/DocumentsByEntityName", new IndexQuery { Query = "Tag:`Albums`", PageSize = 128, Start = count }); if (queryResult.Results.Length == 0) break; count += queryResult.Results.Length; var cmds = new List<ICommandData>(); foreach (var result in queryResult.Results) { var arist = result.Value<JObject>("Arist"); if(arist == null) continue; result["Artist"] = arist; result.Remove("Arist"); cmds.Add(new PutCommandData { Document = result, Metadata = result.Value<JObject>("@metadata"), Key = result.Value<JObject>("@metadata").Value<string>("@id"), }); } documentStore.DatabaseCommands.Batch(cmds.ToArray()); } while (true); }
The code itself should be hard to follow I think, it shows how we can manipulate documents by working with the JSON document directly, instead of having to go through an object layer.
More posts in "Porting MVC Music Store to Raven" series:
- (31 May 2010) StoreManagerController, part 2
- (29 May 2010) StoreManagerController
- (28 May 2010) Porting the checkout process
- (25 May 2010) StoreController
- (24 May 2010) Advanced Migrations
- (23 May 2010) Migrations
- (22 May 2010) Porting the HomeController, the Right Way
- (21 May 2010) Porting the HomeController, the map/reduce way
- (20 May 2010) Data migration
- (19 May 2010) Setting up the application
- (18 May 2010) The data model
Comments
"The code itself should be hard to follow"
Should or Shouldn't?
Code makes sense.
I think it isn't very hard to follow, if you want it to, you should try a bit harder. This is the second time you're using a "while true...do" pattern. Is this because of the asynchronous nature of setting up the index? If that's the case, it could be helpful to have some high-level construct for situations like that that blocks until the desired effect is in place.
Comment preview