SurrealDB: Unterschied zwischen den Versionen

Aus CodicaTipps
Zur Navigation springen Zur Suche springen
Zeile 47: Zeile 47:
  
 
Das ONLY-Schlüsselwort funktioniert nur bei Angabe einer spezifischen Record-ID, nicht
 
Das ONLY-Schlüsselwort funktioniert nur bei Angabe einer spezifischen Record-ID, nicht
aber automatisch bei einer Menge, die nur ein Element enthält. Dann kommt der Fehler
+
aber automatisch bei einer Menge, die nur ein Element enthält.<ref>Vgl. https://surrealdb.com/docs/surrealdb/surrealql/statements/select#the-only-clause .</ref> Dann kommt der Fehler
 
   Expected a single result output when using the ONLY keyword
 
   Expected a single result output when using the ONLY keyword
  

Version vom 20. März 2024, 13:02 Uhr

SurrealDB ist v.a. eine Datenbank, kann aber auch als komplettes Backend für Webanwendungen fungieren.

Tools

Libraries

Betrieb hinter Proxy-Server

Skalierung

  • für ein Cluster greift es wohl auf TiDB zurück

Benutzung der HTTP/REST-API

Die HTTP-API von SurrealDB ist dokumentiert.

Scope-User

Ein Scope wird mit DEFINE SCOPE angelegt.

Beim POST-Request des SIGNUP-Endpunkts wird ein JSON-Objekt mit folgenden Feldern übergeben:

  • NS - der Namespace
  • DB - die Datenbank
  • SC - der Scope-Name (wie hinter DEFINE SCOPE geschrieben)

Die Namen der Felder können auch klein geschrieben werden oder ausgeschrieben:

  • namespace
  • database
  • scope

In Version 1.2.1 dürfen die per POST übermittelten Daten NICHT mit einem Leerzeichen beginnen.

Beispiel eines SIGNUP:

 curl \
   -H "Accept: application/json" \
   --data-binary $'{"ns":"myns", "db":"mydb", "sc": "another_scope"}\n' \
 $surreal_url/signup

SELECT - Besonderheiten

ONLY Schlüsselwort

Das ONLY-Schlüsselwort funktioniert nur bei Angabe einer spezifischen Record-ID, nicht aber automatisch bei einer Menge, die nur ein Element enthält.[1] Dann kommt der Fehler

 Expected a single result output when using the ONLY keyword

Eine solche Menge ist aber akzeptabel, wenn sie

  • durch LIMIT 1 ausdrücklich auf eins begrenzt wird oder
  • indem man mit [0] das erste Element der Menge auswählt (dann braucht man aber das SELECT ... FROM ONLY auch nicht mehr).


Beispiel:

Folgendes funktioniert:

 create  food:orange;
 select * from only food:orange;

Das bringt oben genannten Fehler:

 select * from  only food where id=="food:orange";

Dagegen hilft LIMIT 1:

 select * from only food where id=="food:orange" limit 1;

Oder einfach:

 (select * from food)[0];

Alternativen:

 RETURN (select * from food)[0];

oder

 SELECT * FROM ONLY (select * from food)[0];