2016-04-24 6 views
1

Zuerst, danke für diese großartige Datenbank. Es ist sehr einfach für jeden zu verstehen, der das relationale Modell kennt. Ich kann mir vorstellen, Daten für alle zukünftigen Projekte in einem Diagramm zu modellieren.OrientDB Queries-Syntax verwendet willkürlich die Groß-/Kleinschreibung

Nun ist die Frage,

Ich versuche Orientdb für die Datenmodellierung zu verwenden, und ich ein seltsames Problem konfrontiert. Die Feldnamen in den Abfragen verwenden die Groß-/Kleinschreibung willkürlich.

Zum Beispiel

SELECT FROM appuser WHERE mobile = '1111111111' AND out('userhasrole').rolename CONTAINS 'user' 

und

SELECT FROM appuser WHERE MOBILE= '1111111111' AND out('userhasrole').rolename CONTAINS 'user' 

funktioniert perfekt in Ordnung.

Aber

SELECT FROM appuser WHERE mobile = '1111111111' AND out('userhasrole').ROLENAME CONTAINS 'user' 

und

SELECT FROM appuser WHERE MOBILE= '1111111111' AND out('userhasrole').ROLENAME CONTAINS 'user' 

funktioniert nicht

Beachten Sie, dass es nicht, wenn "Rollenname" funktioniert nicht den Feldnamen exakt übereinstimmen. Könnten Sie bitte vorschlagen, ob das normal ist?

Eine andere Sache, wahrscheinlich wichtiger ist

SELECT FROM appuser WHERE MOBILE= '1111111111' AND out('userhasrole').rolename CONTAINS 'user' 

funktioniert, aber

SELECT FROM appuser WHERE MOBILE= '1111111111' AND out('userhasrole').rolename ='user' 

ist nicht. Das Feld "rolename" ist eine einfache Zeichenfolge, aber ich muss CONTAINS dafür verwenden, damit es funktioniert. Bitte beraten Sie auch dazu.

Bitte lassen Sie mich wissen, wenn ich etwas verpasst habe.

Danke!

+0

Hallo @Sachin, welche Version von OrientDB verwenden Sie? – LucaS

+0

Hallo @ Lucas, es ist die neueste OrientDB-Version für Windows. d.h. 2.1.16. früher habe ich 2.1.6 benutzt und es hatte das gleiche Problem. Ich habe viel Zeit verbracht, um nur Abfragen zu finden, die aufgrund dieses Verhaltens nicht funktionieren :( – Sachin

+0

Hallo @Sachin, ich habe Ihren Fall versucht und die einzige Frage, die ich Ihnen stellen würde, ist auf die Abfrage 'SELECT FROM appuser WHERE MOBILE = '1111111111' und aus ('userhasrole'). rolename CONTAINS 'user'': Sind Sie sicher, dass Sie, auch nur aus Versehen, eine Eigenschaft namens' MOBILE 'mit Großbuchstaben (vielleicht im schemalosen Modus) erstellt haben? Ich frage Sie, weil Soweit ich weiß, ist in OrientDB der '@ class' Name case unsensitive, aber der' properties' Name ist immer case sensitive. – LucaS

Antwort

0

1 ° Antwort

SELECT FROM appuser WHERE mobile = '1111111111' AND out('userhasrole').ROLENAME CONTAINS 'user' 

und

SELECT FROM appuser WHERE MOBILE= '1111111111' AND out('userhasrole').ROLENAME CONTAINS 'user' 

sie nicht funktionieren beacuse der Eigenschaft Rolename in Großbuchstaben geschrieben. OrientDB unterscheidet zwischen Groß- und Kleinschreibung, und Sie müssen den Namen der Eigenschaften korrekt schreiben, insbesondere wenn Sie sich in einer Where-Bedingung befinden.

2 ° aswer

Die Tatsache Gebrauch enthält anstelle von ‚=‘ ist, da die Eigenschaft Rollennamen eine Liste sein könnte, also, es kann eine Menge Daten enthält, aus diesem Grund, den Sie verwenden müssen ENTHÄLT.

Hoffe es hilft

+0

Hallo Michela, danke für die Antwort, aber ich habe Zweifel OrientDB ist die Groß-/Kleinschreibung, warum "** moblie **" und "** MOBILE **" beide funktionieren? Ich möchte nur wissen, ob die Groß-/Kleinschreibung nur in Where-Klausel und nicht in Select gilt. Wenn ja, scheint das nicht falsch Und in Bezug auf die ** 2. Antwort ** ist das Rollename-Feld ein nor Malstringsäule. Die Abfrage 'aus der Rolle wählen, wo ROLENAME = 'USER'' funktioniert gut. Dieses Verhalten von Abfragen erschwert die Generierung von OSQL zur Laufzeit. – Sachin

+0

@Sachin Feldnamen sind Groß-und Kleinschreibung, während Klassennamen nur Groß- und Kleinschreibung beachten, wenn sie als Argumente für out() und in() verwendet werden. out ('userhasrole'). ROLENAME gibt eine String-Liste zurück und dann müssen Sie contains verwenden. –

+0

Hallo @ AlessandroRota, danke für die Vorschläge. Ich habe ein Problem für die Groß-/Kleinschreibung geöffnet. [Groß-/Kleinschreibung-Problem] (https://github.com/orientechnologies/orientdb/issues/6050) – Sachin