Ich suche nach einer Möglichkeit, alle Benutzer mit dem Index users_filtered
if abzufragen isApproved: true
. Ich verwende Fauna als Datenbank in meinem Next.js-Projekt. Ich habe isApproved als Begriff für den Index users_filtered
in der Fauna-Datenbank hinzugefügt.
Hier ist ein Beispiel für ein Dokument in der Benutzersammlung:
{
"ref": Ref(Collection("users"), "328571711165938374"),
"ts": 1649676683111000,
"data": {
"givenName": "Leo",
"familyName": "Deo",
"isApproved": true
}
Hier ist meine aktuelle Funktion, die alle Dokumente über den Index abfragtusers_filtered
const getFilteredUsers = async () => {
const { data } = await faunaClient.query(
q.Map(
q.Paginate(q.Match(q.Index("users_filtered"))),
q.Lambda("userRef", q.Get(q.Var("userRef")))
)
)
const filtered = data.map((x) => {
x.data.id = x.ref.value.id
x.data.ts = x.ts
return x.data
})
return filtered
}
Indexdefinition:
Quellensammlung: Benutzer
Indexname: users_filtered
Bedingungen: isApproved
Werte: Keine definiert
Wie kann ich alle Dokumente abfragen, die das isApproved: true
?
Lösung des Problems
Ihre Indexdefinition scheint etwas merkwürdig zu sein. Es sieht so aus, als würden Sie die im Dashboard angezeigten Werte melden, aber wenn ja, ist die terms
Definition falsch: Es sollte sein data.isApproved
. Über FQL sollten Sie so etwas sehen wie:
> Get(Index("users_filtered"))
{
ref: Index("users_filtered"),
ts: 1649779238270000,
active: true,
serialized: true,
name: "users_filtered",
unique: false,
source: Collection("users"),
terms: [
{
field: ["data", "isApproved"]
}
],
partitions: 1
}
Wenn Sie versehentlich ausgelassen haben data.
, könnte Ihre Indexdefinition korrekt sein und Sie sollten fortfahren können.
When an index has a terms
definition, that definition specifies how the index can be searched. With the isApproved
field as a term, then you have to specify which value of isApproved
that you're looking for in your Match
expression. For example:
const { data } = await faunaClient.query(
q.Map(
q.Paginate(q.Match(q.Index("users_filtered"), true)),
q.Lambda("userRef", q.Get(q.Var("userRef")))
)
)
Wenn ich das von Ihnen beschriebene Benutzerdokument erstelle, lautet das Ergebnis der Abfrage:
{
data: [
{
ref: Ref(Collection("users"), "328750455338304000"),
ts: 1649779715770000,
data: { givenName: 'Leo', familyName: 'Deo', isApproved: true }
}
]
}
Keine Kommentare:
Kommentar veröffentlichen