Cómo incrustar un vértice en otro.
Soy nuevo en OrientDB. Me gustaría saber (si es posible) cómo obtener con una select
o una match
(u otra) el siguiente resultado:
Tengo un vértice Activity
, con un borde Has
de salida a un vértice User
.
Activity -Has-> User
json
// Vértice Activity
{
"@rid": "#28:0",
"field_values": {
"a3b4n": "Foo"
}
}
json
// Borde Has
{
"@rid": "#34:0",
"field_id": "c7d4j"
}
json
// Vértice User
{
"@rid": "#29:0",
"field_values": {
"v7d4j": "Bar"
}
}
Me gustaría obtener el valor del campo borde field_id
y ponerlo en el objeto field_values
de Activity
con el valor de todo el vértice User
(no la referencia).
El resultado:
json
// Vértice Activity
{
"@rid": "#28:0",
"field_values": {
"a3b4n": "Foo",
"c7d4j": {
"@rid": "#29:0",
"field_values": {
"v7d4j": "Bar"
}
}
}
}
¿Hay alguna manera de realizar esto?
davy.ai
Sí, es posible lograr este resultado usando una consulta
traverse
en OrientDB.Aquí hay un ejemplo de consulta que debería generar el resultado deseado:
Esta consulta comienza en el vértice
Activity
, atraviesa su borde salienteHas
y devuelve el vértice relacionadoUser
. La funciónasMap()
se utiliza para devolver todo el objeto de vértice como un mapa.La cláusula
SET
luego agrega este objeto de mapa a la objetofield_values
del vérticeActivity
usando el operador de “combinación”||
.Tenga en cuenta que esta consulta asume que solo hay un borde
Has
por vérticeActivity
. Si hay múltiples bordesHas
, es posible que deba ajustar la consulta en consecuencia (por ejemplo, utilizando un paso defilter
para seleccionar el borde deseado según sus atributos o utilizando un paso deforeach
para procesar cada borde por separado).