이전 문서에서 새 문서를 만드는 것이 좋습니다.
docStore.UpdateByIndex을 통한 패치를 사용하면 쉽게 처리 할 수 있습니다.
예를 들어 이전 형식 이름 인 Foo가 있고 새 형식 이름 인 Bar로 이름을 바꾸려고한다고 가정합니다. Foos/123에서 Bars/123으로 모든 ID를 변경하기를 원했습니다. 한 번 시작시 코드
var patchScript = @"
// Copy all the properties from the old document
var newDoc = {};
for (var prop in this) {
if (prop !== '@metadata') {
newDoc[prop] = this[prop];
}
}
// Create the metadata.
var meta = {};
meta['Raven-Entity-Name'] = newCollection;
meta['Raven-Clr-Type'] = newType;
// Store the new document.
var newId = __document_id.replace(oldCollection, newCollection);
PutDocument(newId, newDoc, meta);
";
var oldCollection = "Foos";
var newCollection = "Bars";
var newType = "KarlCassar.Bar, KarlCassar"; // Where KarlCassar is your assembly name.
var query = new IndexQuery { Query = $"Tag:{oldCollection}" };
var options = new BulkOperationOptions { AllowStale = false };
var patch = new ScriptedPatchRequest
{
Script = patchScript,
Values = new Dictionary<string, object>
{
{ nameof(oldCollection), oldCollection },
{ nameof(newCollection), newCollection },
{ nameof(newType), newType }
}
};
var patchOperation = docStore.DatabaseCommands.UpdateByIndex("Raven/DocumentsByEntityName", query, patch, options);
patchOperation.WaitForCompletion();
실행 한 다음 응용 프로그램은 새 이름 엔티티와 함께 작동 할 수있을 것입니다 :
그것은 다음과 같이 보일 것입니다. 이전 엔티티가 아직 남아 있습니다. Studio를 통해 안전하게 삭제할 수 있습니다.