我有一个查询,我正在针对我的Azure DocumentDb运行,以根据用户名或电子邮件查找用户:
let searchUsers (u : string) (e : string) =
let ul = u.ToLowerInvariant()
let el = e.ToLowerInvariant()
printfn "Search fields are username: %A , email %A" ul el
let q = query {
for x in client.CreateDocumentQuery<User>( documentUri(), feed() ) do
where (x.RecordType = userRecordType && (x.UsernameLowercase = ul || x.EmailLowercase = el))
select x
}
printfn "Query is %A" q.Expression
Seq.toList q
从我的print语句中,我可以得到以下输出:
Search fields are username: "" , email "test@test.com"
Query is https://REDACTED.Where(x =>
((x.RecordType == "user") AndAlso
((x.UsernameLowercase == "") OrElse (x.EmailLowercase == "test@test.com"))))
此查询始终返回0结果。
如果我在Azure门户中的查询资源管理器上运行此查询:
SELECT * FROM c
where c.RecordType = "user"
and (
c.UsernameLowercase = ""
or
c.EmailLowercase = "test@test.com"
)
我得到了我期望找到的单曲。
我在FeedOptions
对象中设置的唯一内容是EnableCrossPartitionQuery <- true
,这是查询运行所必需的。
记录本身的UsernameLowercase
值为testaccount
,但在我在代码中运行的查询中将其设置为无论如何都找不到我的记录。我正在搜索的字段不是选项类型,DU或其他任何特殊字段 - 它们只是字符串。
修改:
我发现了这个问题......和往常一样,如果你找不到你正在寻找的问题,那么你需要去其他地方看看!
在其中一个调用函数中,我返回的是async
计算本身,而不是查询结果。