既存のドキュメントにプロパティを追加したい(http://ravendb.net/docs/client-api/partial-document-updatesからの手がかりを使用)。しかし、追加する前に、そのプロパティがデータベースにすでに存在するかどうかを確認したいと思います。
それを達成するための「特別で適切なravendBの方法」はありますか?
または、ドキュメントをロードして、このプロパティがnullかどうかを確認しますか?
既存のドキュメントにプロパティを追加したい(http://ravendb.net/docs/client-api/partial-document-updatesからの手がかりを使用)。しかし、追加する前に、そのプロパティがデータベースにすでに存在するかどうかを確認したいと思います。
それを達成するための「特別で適切なravendBの方法」はありますか?
または、ドキュメントをロードして、このプロパティがnullかどうかを確認しますか?
これは、セットベースのデータベース更新を使用して行うことができます。JavaScript を使用して実行します。幸いなことに、JavaScript は C# とよく似ているため、誰にとっても非常に簡単なプロセスになります。これは、私が実行したばかりの更新の例です。
注:スクリプト内のエラーによって望ましくない結果が生じる可能性があるため、これを行うには細心の注意を払う必要があります。たとえば、私のコードでは CustomId に「1234-1」のようなものが含まれています。スクリプトを書く最初の反復では、次のことがありました。
product.Order = parseInt(product.CustomId.split('-'));
分割後にインデクサーを忘れたことに注意してください。結果?エラーですよね?いいえ。注文の値は 12341 でした! 1 のはずです。そのため、注意して、十分にテストしてください。
例:
Job には Products プロパティ (コレクション) があり、既存の Products に新しい Order プロパティを追加しています。
ravenSession.Advanced.DocumentStore.DatabaseCommands.UpdateByIndex(
"Raven/DocumentsByEntityName",
new IndexQuery { Query = "Tag:Jobs" },
new ScriptedPatchRequest { Script =
@"
this.Products.Map(function(product) {
if(product.Order == undefined)
{
product.Order = parseInt(product.CustomId.split('-')[1]);
}
return product;
});"
}
);
これらのページを参照してビルドしました。