GOOGLE ADS

Sonntag, 17. April 2022

Wie frage ich nach Daten innerhalb eines Sammlungsdokuments in Fauna ab?

Ich suche nach einer Möglichkeit, alle Benutzer mit dem Index users_filteredif abzufragen isApproved: true. Ich verwende Fauna als Datenbank in meinem Next.js-Projekt. Ich habe isApproved als Begriff für den Index users_filteredin 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 termsDefinition 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

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...