OrientDB查询语法任意使用大小写敏感度

OrientDB查询语法任意使用大小写敏感度,orientdb,orientdb-2.1,Orientdb,Orientdb 2.1,首先,感谢你提供了这个很棒的数据库。对于任何了解关系模型的人来说,这是非常容易理解的。我可以看到我自己为所有未来的项目在图表中建模数据 现在的问题是 我试图使用OrientDB进行数据建模,但遇到了一个奇怪的问题。查询中的字段名任意使用大小写敏感度 比如说, SELECT FROM appuser WHERE mobile = '1111111111' AND out('userhasrole').rolename CONTAINS 'user' 及 效果非常好。 但是 及 不起作用 请注意,

首先,感谢你提供了这个很棒的数据库。对于任何了解关系模型的人来说,这是非常容易理解的。我可以看到我自己为所有未来的项目在图表中建模数据

现在的问题是

我试图使用OrientDB进行数据建模,但遇到了一个奇怪的问题。查询中的字段名任意使用大小写敏感度

比如说,

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

效果非常好。

但是

不起作用

请注意,如果“rolename”与确切的字段名不匹配,则它不起作用。你能告诉我这是否正常吗

另一件事,可能更重要的是

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

SELECT FROM appuser WHERE MOBILE= '1111111111' AND out('userhasrole').rolename ='user'
不起作用。字段“rolename”是一个简单的字符串,但我仍然必须使用CONTAINS才能工作。请也给我一些建议

如果我遗漏了什么,请告诉我


谢谢

1°回答

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

它们不起作用,因为属性ROLENAME是大写的。OrientDB区分大小写,您必须正确写入属性的名称,尤其是在where条件下

2°Aswer

SELECT FROM appuser WHERE mobile = '1111111111' AND out('userhasrole').ROLENAME CONTAINS 'user'
使用contains而不是“=”是因为属性rolename可以是一个列表,因此它可以包含大量数据,因此必须使用contains


希望它有助于回答

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

它们不起作用,因为属性ROLENAME是大写的。OrientDB区分大小写,您必须正确写入属性的名称,尤其是在where条件下

2°Aswer

SELECT FROM appuser WHERE mobile = '1111111111' AND out('userhasrole').ROLENAME CONTAINS 'user'
使用contains而不是“=”是因为属性rolename可以是一个列表,因此它可以包含大量数据,因此必须使用contains


希望对您有所帮助

Hi@Sachin,您使用的是哪个版本的OrientDB?Hi@Lucas,这是适用于windows的最新OrientDB版本。i、 e.2.1.16。之前我使用的是2.1.6,它也有同样的问题。我花了很多时间才发现查询由于这种行为而无法工作:(嗨@Sachin,我试过你的案例,我唯一想问你的问题是查询
SELECT FROM appuser WHERE MOBILE='1111111'和out('userhasrole')).rolename包含“user”
:您确定没有创建一个名为
MOBILE
的大写属性(可能在无架构模式下),这也是错误的吗?我问你这个问题是因为,据我所知,在OrientDB中,
@class
名称不区分大小写,但是
属性
名称总是区分大小写。嗨@LucaS,属性mobile是用小写创建的。但是上面查询中的where条件在小写和大写两种情况下都起作用。我尝试了两种情况l模式打开和关闭。我正在使用OrientDB Studio Browse选项卡执行查询。Studio是否有不同的做法?Hi@Lucas,我想我已经确定了一个可能的原因。移动字段有一个唯一的索引。我尝试了另一个属性的索引打开/关闭场景,当存在一个索引,在没有索引时不起作用。这可能是原因吗?Hi@Sachin,您使用的是哪个版本的OrientDB?Hi@Lucas,这是windows的最新OrientDB版本。即2.1.16。之前我使用的是2.1.6,它也有同样的问题。我花了很多时间才发现由于这种行为导致的查询不起作用:(您好@Sachin,我尝试了您的案例,我想问您的唯一问题是查询
SELECT FROM appuser WHERE MOBILE='1111111'和out('userhasrole')。rolename包含'user'
:您确定没有创建一个名为
MOBILE
的大写属性(可能在无模式下)?我问你这个问题是因为,据我所知,在OrientDB中,
@class
名称不区分大小写,但是
属性
名称总是区分大小写。嗨@LucaS,属性mobile是用小写创建的。但是上面查询中的where条件在小写和大写两种情况下都起作用。我尝试了两种情况l模式打开和关闭。我正在使用OrientDB Studio Browse选项卡执行查询。Studio是否有不同的做法?Hi@Lucas,我想我已经确定了一个可能的原因。移动字段有一个唯一的索引。我尝试了另一个属性的索引打开/关闭场景,当存在一个索引和没有索引时不起作用。这可能是原因吗?嗨,Michela,谢谢你的回答。不过我有一个疑问。如果OrientDB区分大小写,为什么“moblie”和“MOBILE”都能起作用?我只想知道区分大小写是否只适用于where子句,而不适用于select。如果是,这似乎不对。关于第二个答案rolename字段是一个普通的字符串列。查询
从rolename='USER'
所在的角色中进行选择工作正常。这种查询行为使得在运行时很难生成OSQL。@Sachin字段名区分大小写,而类名仅当用作out()和in()的参数时才区分大小写。out('userhasrole')).ROLENAME返回一个字符串列表,然后您必须使用contains。嗨@Alessandrororota,谢谢您的建议。我已经打开了一个区分大小写的问题。嗨@Michela,我已经为区分大小写的问题创建了一个问题嗨Michela,谢谢您的回答。不过我有一个疑问。如果OrientDB区分大小写,为什么是“moblie”和“MOBILE”呢th有效?我只想知道区分大小写是否只适用于where子句而不适用于select。如果是,它似乎是错误的。关于第二个答案,rolename字段是一个普通的字符串列。查询
select from role,其中rolename='USER'
可以正常工作。这种查询行为使我们很难确定
SELECT FROM appuser WHERE MOBILE= '1111111111' AND out('userhasrole').ROLENAME CONTAINS 'user'