Wenn ich Sie richtig verstanden habe, sollten Sie in der Lage zu geben:
(d/q [:find ?e
:in $
:where [?e :type]] db)
In Datomic, werden alle nicht spezifizierten Werte gelten als Platzhalter sein. Die obige Abfrage gibt eine Liste aller Entitäten mit dem Attribut :type
zurück, unabhängig vom Wert.
aktualisieren
Datomic Abfrage ist für einen ebenen Wert zu übernehmen, wie 5
oder :awesome
in die ?type
variable wechselt werden müsse. Ein Symbol wie _
(oder die zitierte Version '_
) passt nicht zu dem von Datomic erwarteten Muster.
Nur zum Spaß habe ich verschiedene Varianten ausprobiert und konnte Datomic nicht dazu bringen, das Symbol '_ für die Variable ?type
in der von Ihnen vorgeschlagenen Weise zu akzeptieren. Ich denke, Sie müssen eine separate Abfrage für den Wildcard-Fall schreiben.
Im Wesentlichen ist der Platzhalter _
ein spezielles Symbol (auch bekannt als "reserviertes Wort") in der Datomic-Abfragesyntax wie $
. Datomic erzwingt auch, dass Abfragevariablen mit einem ?
wie ?e
oder ?type
beginnen. Diese Anforderungen sind Teil des Datomic DSL, das Sie nicht ändern können.
Die einzige Problemumgehung neben dem manuellen Schreiben separater Abfragen wäre das dynamische Erstellen des Abfragevektors aus einem Basisteil und Add-On-Teilen. Ob das einfacher oder schwerer ist als das manuelle Schreiben der verschiedenen Abfragen, hängt von Ihrer spezifischen Situation ab.
Können Sie ein Beispiel hinzufügen, was Sie zu tun versuchen? –