es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  ,

Answer

  1. Avatar for 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:

    UPDATE Activity 
    SET field_values = field_values || {'c7d4j': (traverse out('Has') from $parent.current)[$depth].asMap()}
    

    Esta consulta comienza en el vértice Activity, atraviesa su borde saliente Has y devuelve el vértice relacionado User. La función asMap() 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 objeto field_values del vértice Activity usando el operador de “combinación” ||.

    Tenga en cuenta que esta consulta asume que solo hay un borde Has por vértice Activity. Si hay múltiples bordes Has, es posible que deba ajustar la consulta en consecuencia (por ejemplo, utilizando un paso de filter para seleccionar el borde deseado según sus atributos o utilizando un paso de foreach para procesar cada borde por separado).

Comments are closed.