如何在OrientDb中插入文档?

时间:2017-10-02 10:18:32

标签: orientdb

虽然答案中存在类似的问题但我仍然无法插入包含文档的行。

任何想法如何实现?

我在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"

注意:请忽略您在语法中看到的小错别字,因为我从头开始输入。假设没有语法错误,我已经与一些同事一起检查了所有这些错误。

提前致谢!

2 个答案:

答案 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;

是正确的设置。之后,可以使用任何记录的符号。