文書上のアクティブなユーザを検索するRavenDBクエリがあります。RavenDBの子オブジェクトに関するすべてのクエリが不正な結果を返します
通常のクエリは次のようになります。
var documents = session.Query<Document>().Where(d => d.Users.Any(u => u.Id == UserId && u.Active == true)).ToList();
自動的に生成されたクエリは次のようになります。
from doc in docs.Documents
select new {
Users_Active = (
from docUsersItem in ((IEnumerable<dynamic>)doc.Users).DefaultIfEmpty()
select docUsersItem.Active).ToArray(),
Users_Id = (
from docUsersItem in ((IEnumerable<dynamic>)doc.Users).DefaultIfEmpty()
select docUsersItem.Id).ToArray()
}
はしかし、これは、クエリが正しいユーザーを持つドキュメントを返すようになりますが、そのユーザは、ドキュメント上に別のアクティブユーザがいる限り、非アクティブである。
私はフィールドが結果として得られるインデックスが作成されているので、これは疑う:
AssignedUsers_Id: [1, 2]
AssignedUsers_Active:[false, true]
そしてクエリは、彼らは彼らの中に異なる指標であるにも関わらず、アクティブアレイでは、アレイ内のIDと一致し、そして真のだろうそれぞれのアレイ。
UserIdが正しい文書が返されるようにするには、どのような変更を行う必要がありますか?
今後自動的にインデックスが作成されないようにするには、LINQクエリを書き換えてインデックスを作成して正しく実行できるようにする方法はありますか?
サーバー側のパフォーマンスが高い場合は、通常のようにクエリの結果を受け入れて、代わりにC#で間違ったものをフィルタ処理する方が良いでしょうか? –
いいえ、あなたが実際にそれを必要としている場合は、パーツコストは問題ありません。ほとんどの場合、インデックス作成が必要です。問題は、デフォルトでこれを行うと間違っているということです。 –