虽然答案中存在类似的问题但我仍然无法插入包含文档的行。
任何想法如何实现?
我在OrientDB版本2.2.x上进行了以下设置。
CREATE CLASS TranslatableText ABSTRACT;
CREATE PROPERTY TranslatableText.de IF NOT EXISTS STRING;
CREATE PROPERTY TranslatableText.en IF NOT EXISTS STRING;
CREATE CLASS Product;
CREATE PROPERTY Product.id IF NOT EXISTS INTEGER;
CREATE PROPERTY Product.name IF NOT EXIST EMBEDDEDMAP TranslatableText;
然后;我想运行以下INSERT语句。
INSERT INTO Product (id, name) VALUES (1, {"@type":"d", "@class": "TranslatableText", "de":"Auto", "en":"Car"});
我收到类似下面的错误:
com.orientechnologies.orient.core.exception.OValidationException: The field 'Car.name' has been declared as EMBEDDEDMAP but an incompatible type is used. Value: TranslatableText{en:Car} DB name="some_db"
注意:请忽略您在语法中看到的小错别字,因为我从头开始输入。假设没有语法错误,我已经与一些同事一起检查了所有这些错误。
提前致谢!
答案 0 :(得分:1)
您需要将SET与EMBEDDEDMAP一起使用,例如:
insert into Product SET id=1,name={"de":"Auto","en":"Car"}
答案 1 :(得分:1)
行。我认为我们方面存在误解。 EMBEDDEDMAP是一种复杂的数据类型,它提供无方案键值(json-like)存储。
分配"类"对EMBEDDEDMAP的验证实际上违反/滥用了EMBEDDEDMAP的实际用法。因此我们得到上述错误。
如果需要存储具有特定方案的特定文档,EMBEDDED即可。
基本上;
CREATE CLASS TranslatableText ABSTRACT;
CREATE PROPERTY TranslatableText.de IF NOT EXISTS STRING;
CREATE PROPERTY TranslatableText.en IF NOT EXISTS STRING;
CREATE CLASS Product;
CREATE PROPERTY Product.id IF NOT EXISTS INTEGER;
CREATE PROPERTY Product.name IF NOT EXIST EMBEDDED TranslatableText;
是正确的设置。之后,可以使用任何记录的符号。