特定の基準を満たすすべてのドキュメントについて、それらのドキュメントのフィールドをパッチ更新したいと考えています。このために、必要なドキュメントのサブセットを取得するクエリを LINQ Pad で作成しました。
あれは :
Session.Query<Movie>()
.Where(x => x.Status == "Released" && x.IsDeleted == false && x.ReleaseDate.Date < new DateTime(2012, 4, 3))
.Dump();
これでドキュメントのリストができました。しかし、フィールドを変更する必要があります。このために、index コマンドと patch コマンドを作成しました。このタスクを完了するには、助けが必要です。
パッチコード (不完全) :
store.DatabaseCommands.UpdateByIndex("Movies/NewIndexName",
new IndexQuery { Query = "IsDeleted:false" },
new[]
{
new PatchRequest
{
Type = PatchCommandType.Modify,
Name = "Status",
Value = "Testing"
}
}, allowStale: false);
インデックスは
from doc in docs.Movies
select new { ReleaseDate = doc.ReleaseDate.Date, IsDeleted = doc.IsDeleted, Status =
doc.Status }
具体的には、私の質問は..私のアプローチは正しいですか..そうであれば、条件に複数の基準を追加するにはどうすればよいですか.. Query = "IsDeleted:false"と書かれている場所で、クエリに比較チェックを追加できますか(上記の LINQ クエリ)?
編集:(ダニエル・ラングのソリューションを使用)
これにより、フォーマット例外が発生します。入力文字列が正しいフォーマットではありません。
store.DatabaseCommands.UpdateByIndex("Movies/NewIndexName",
new IndexQuery
{
Query =
string.Format("Status:Released AND IsDeleted:false AND ReleaseDate:{* TO {0}}",
DateTools.DateToString(new DateTime(2012, 4, 3),
DateTools.Resolution.MILLISECOND))
},
new[]
{
new PatchRequest
{
Type = PatchCommandType.Modify,
Name = "Status",
Value = "TestingReleased"
}
}, allowStale: false);