我遇到了一个我无法弄清楚的查询问题,我在代码中执行此查询:
var userList = (from user in this.documentSession.Query<User>()
where user.FederatedUserIds[authenticatedClient.ProviderName] == authenticatedClient.UserInformation.Id
select user).ToList();
在这种情况下,providername是facebook,id = 100001103765630.FederatedUserId是一个字典。
这导致对服务器的此查询:
http://localhost:8080/indexes/dynamic/Users?&query=FederatedUserIds.facebook%3A100001103765630&pageSize=128
其结果为零,也来自webbrowser中的查询:
{
"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
}
虽然我在数据库中有一个类似的文档,但我希望得到1个结果而不是0:
{
"DisplayName": "neographikal",
"RealName": "x",
"Email": "x",
"PictureUri": "x",
"Roles": [
"User"
],
"ProfileImages": [],
"FederatedUserIds": {
"google": "x",
"twitter": "x",
"windowslive": "x",
"linkedin": "x",
"facebook": "100001103765630"
}
}
奇怪的是,这段代码之前从未打扰过我。有人能看出我做错了吗?
答案 0 :(得分:1)
我打算说你可能有陈旧的结果,但我看到"IsStale": false
。
我看到的另一件事是,对URL的查询是FederatedUserIds.facebook
,而字段名称将在索引中为FederatedUserIds_facebook
。但是,我对此进行了测试并且有效,因此在查询执行之前,.
似乎已转换为_
。我不确定这是什么时候添加的,或者它是否总是那样。
请注意,如果您尝试在Raven Studio中使用.
进行查询,那么它在那里无效,但_
会这样做。
您正在运行什么版本的版本?我在2.5.2666上进行了测试,它对我有用。
答案 1 :(得分: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))
};
}