1

理解できないクエリに問題があります。コードで次のクエリを実行しています。

var userList = (from user in this.documentSession.Query<User>()
                            where user.FederatedUserIds[authenticatedClient.ProviderName] == authenticatedClient.UserInformation.Id
                            select user).ToList();

この場合、プロバイダー名は facebook で、id = 100001103765630 です。FederatedUserId はディクショナリです。

サーバーへの次のクエリになります。

http://localhost:8080/indexes/dynamic/Users?&query=FederatedUserIds.facebook%3A100001103765630&pageSize=128

Webブラウザのクエリからも、結果がゼロになります。

{
    "Results": [],
    "Includes": [],
    "IsStale": false,
    "IndexTimestamp": "2013-08-24T14:52:44.0511623Z",
    "TotalResults": 0,
    "SkippedResults": 0,
    "IndexName": "Auto/Users/ByFederatedUserIds_facebook",
    "IndexEtag": "01000000-0000-0064-0000-000000000001",
    "ResultEtag": "2BD9AA1E-935A-FEDF-3636-FAB0F155ED9E",
    "Highlightings": {},
    "NonAuthoritativeInformation": false,
    "LastQueryTime": "2013-08-24T15:00:30.1200358Z",
    "DurationMilliseconds": 1
}

データベースには次のようなドキュメントがあるため、0 ではなく 1 つの結果が期待されます。

{
  "DisplayName": "neographikal",
  "RealName": "x",
  "Email": "x",
  "PictureUri": "x",
  "Roles": [
    "User"
  ],
  "ProfileImages": [],
  "FederatedUserIds": {
    "google": "x",
    "twitter": "x",
    "windowslive": "x",
    "linkedin": "x",
    "facebook": "100001103765630"
  }
}

奇妙なことに、これはこのコードでこれまで私を悩ませたことはありませんでした。誰かが私がこれを間違っているところを見ることができますか?

4

2 に答える 2

1

どういうわけか、これはインデックスに関連していました。自動インデックス クエリでしたが、サーバー上のすべてのインデックスを削除し、アプリケーションを再起動すると問題が解決しました。これはあってはならないことだと思いますが、再現するのは非常に難しかったようです。機能で再現できる場合は、さらに調査を試みます。

編集 01-09:

問題を発見し、バグ レポートを作成しました: http://issues.hibernatingrhinos.com/issue/RavenDB-1334

まともなインデックスを作成することでそれを回避しました:

public class UserByFederatedLoginIndex : AbstractIndexCreationTask<Core.Domain.User>
    {
        public UserByFederatedLoginIndex()
        {
            Map = users => from u in users
                           select new
                               {
                                   u.DisplayName,
                                   _ = u.FederatedUserIds.Select(x => CreateField("FederatedUserIds_"+x.Key, x.Value))
                               };
        }
于 2013-08-25T00:16:03.477 に答える
1

古い結果になるかもしれないと言おうとしましたが、わかりました"IsStale": false

私が目にする唯一の他のことはFederatedUserIds.facebook、フィールド名がFederatedUserIds_facebookインデックスにある間、URL のクエリが通過することです。ただし、これをテストしたところ機能したため、クエリが実行される前に に.変換されているようです。_これがいつ追加されたのか、それともずっとそうであったのかはわかりません。

.Raven Studio でクエリを実行しようとしても、そこでは機能しないことに注意してください_

実行しているビルドのバージョンは何ですか? 2.5.2666 でテストしたところ、うまくいきました。

于 2013-08-24T20:23:40.530 に答える