更新: 我可以通过 INSERT INTO (插入到)来解决此问题:
INSERT INTO newClass FROM SELECT newClassID AS id, newClassName AS name FROM oldClass GROUP BY newClassID
我在Orient DB 2.2版中使用SQL。
我想通过属性newClassID对一个类的元素进行分组(此类中有多个共享newClassID的Elements,可以说我在第一类中有20个Elements和3个唯一的newClassID)。每个组将具有唯一的newClassID和newClassName,因为这些属性是并行的。
对于每个组,我要创建另一个类(newClass
)的元素,该元素的id为newClassID,名称为newClassName。在上述情况下,这将在newClass
中产生3个新元素。
头等舱的Emelemt看起来像:
+-------+------------+--------------+
| Elem | newClassID | newClassName |
+-------+------------+--------------+
| 1 | id1 | name1 |
| 2 | id2 | name2 |
| 3 | id1 | name1 |
| 4 | id3 | name3 |
| 5 | id2 | name2 |
+-------+------------+--------------+
然后我要在新类中创建3个新元素:
+-------+------------+--------------+
| Elem | ID | Name |
+-------+------------+--------------+
| 1 | id1 | name1 |
| 2 | id2 | name2 |
| 3 | id3 | name3 |
+-------+------------+--------------+
通过此查询,我获得ID和名称作为属性:
BEGIN
let pattern = SELECT newClassID, newClassName FROM oldClass GROUP BY newClassID
COMMIT
RETURN { 'id' : $pattern.newClassID, 'name' : $pattern.newClassName }
结果:
[
{
"@type": "d",
"@version": 0,
"name": [
"name1",
"name2",
"name3"
],
"id": [
"id1",
"id2",
"id3"
],
"@fieldTypes": "name=e,id=e"
}
]
现在,我想调用此函数(称为GetNewClass()
),并为id中的每个条目创建一个newClassElement。我不能使用FOREACH
,因为它仅在3.x版本中可用。老实说:在这里我不知道如何做到这一点。
我尝试过:
BEGIN
INSERT INTO newClass FROM SELECT GetNewClass()
let newElements = SELECT FROM newClass
RETURN $newElements
但这给了我一个要素:
[
{
"@type": "d",
"@rid": "#41:1",
"@version": 1,
"@class": "newClass",
"GetProdID": {
"name": [
"name1",
"name2",
"name3"
],
"id": [
"id1",
"id2",
"id3"
]
}
}
]
非常感谢!