我在ArangoDb中的集合中包含具有此模式的对象(简化):
{
"userName": "Billy",
"email": "Billy@test.com",
"logins": [
{
"authenticationTokens": [],
"loginProvider": "Facebook",
"providerKey": "123",
"providerDisplayName": null
}
],
"roles": [],
"claims": []
}
这是由BorderEast在ArangoDb上实现的ASPNetCore.Identity aspnetcore-identity-arangodb
PROBLEM:
要使用Facebook进行身份验证,它会使用AQL查询
for u in IdentityUser for l in u.logins filter l.loginProvider == "Facebook" && l.providerKey == "123" return u
哪个效果不错但不使用任何索引
Indexes used:
none
我试过指数:
db.IdentityUser.ensureIndex({ type: "hash", fields: [ "logins[*].loginProvider", "logins[*].providerKey" ] });
db.IdentityUser.ensureIndex({ type: "hash", fields: [ "logins[*].loginProvider" ] });
db.IdentityUser.ensureIndex({ type: "hash", fields: [ "logins[*].providerKey" ], unique: true });
它们都没有被使用 .
有人可以建议该查询的索引应该如何吗?
1 回答
问题在于他们查询 . 它需要重新编写然后才能工作 . 它与使用
in
中讨论的in
比较运算符有关:因此,如果我们更改查询,我们会得到: