mongoDB - Extraer elementos posteriores y anteriores en una array

 
Vista:
Imágen de perfil de Joserra
Val: 4
Ha mantenido su posición en mongoDB (en relación al último mes)
Gráfica de mongoDB

Extraer elementos posteriores y anteriores en una array

Publicado por Joserra (3 intervenciones) el 14/04/2020 21:48:31
Hola

tengo un documento (tendré muchos si construyo la colección) que contendrá un array. Cada uno de estos elementos tendrá un campo clave sobre el que construiré un índice multikey; con lo cuál podré localizar cualquier documento rápidamente gracias a cualquier elemento que figuré en la array.

Pero yo lo que querría es recuperar del documento solo los elementos coincidentes en una propiedad con el elemento que me ha permitido tener éxito en la búsqueda.

El find sería algo así:
find({"array_struct.element_id":"Element4"}), -> tiene un valor "rama":"1"

Y debería devolverme tan solo los elementos que tienen "rama:":"1", al igual que el elemento que me ha permitido tener éxito en la búsqueda (serían los elementos Element1, Element5 y el propio Element4.

La duda es un poco compleja, lo sé, pero si al menos me dieseis una pista de cómo filtrar de un documento valores del propio documento y permitir en la respuesta solo los valores coincidentes con un valor, reutilizado como una variable, me sería muy útil.

Ejemplo del documento completo es este:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
{
  "_id": "doc2",
  "header_code_id": "CodeA",
  "header_type": "TypeA",
    "array_struct": [
      {
        "element_id": "Element1",
        "node_type": "TypeAA",
        "rama:":"1",
        "level":1
      },
      {
        "element_id": "Element2",
        "node_type": "TypeBA",
        "rama:":"2",
        "level":1
      },
      {
        "element_id": "Element3",
        "node_type": "TypeBB",
        "rama:":"2",
        "level":1
      },
      {
        "element_id": "Element4",
        "node_type": "TypeAB",
        "rama:":"1",
        "level":2
      },
      {
        "element_id": "Element5",
        "node_type": "TypeAC",
        "rama:":"1",
        "level":3
      }
    ],
  "user_audit_id": "YOMISMO",
  "audit_date": "2020-04-16-09.46.57.664209"
}


Gracias anticipadas.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de joel
Val: 32
Ha mantenido su posición en mongoDB (en relación al último mes)
Gráfica de mongoDB

Extraer elementos posteriores y anteriores en una array

Publicado por joel (10 intervenciones) el 15/04/2020 09:40:48
Hola Joserra, la verdad no entiendo muy bien lo que quieres obtener...

Según los datos que muestras, que querrías que te devolviera?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de José Ramón
Val: 4
Ha mantenido su posición en mongoDB (en relación al último mes)
Gráfica de mongoDB

Extraer elementos posteriores y anteriores en una array

Publicado por José Ramón (3 intervenciones) el 15/04/2020 21:09:17
Hola Joel, muchas gracias ante todo

Querría devolver tan solo los valores que figuran en la Array para "Element1", "Element4" y "Element5" (te pongo el resultado buscado abajo). ¿Por qué?, porque coinciden en que son los tres registros que tienen valor rama:1 (yo ese dato lo desconozco al hacer la consulta). Yo la búsqueda para llegar al documento la haré por array_struct.node_type:TypeAB. Pero en el resultado debería tener solo ese elemento y los "asociados" por el valor "rama". No el resto de elementos.

Entiendo que sobre el documento recuperado, que incluiría a todos los campos y elementos, habría que hacer un tratamiento para filtrar la salida para que solo devolviese los elementos que coinciden con el encontrado en el valor rama, lo cierto es no sé cómo hacerlo (ni siquiera si se puede). Yo he propuesto hacer el tratamiento en el programa, pero cómo puede ser información sensible, recuperar la información filtrada parece lo mejor.

Elementos que deberían salir...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
    "element_id": "Element1",
    "node_type": "TypeAA",
    "rama:":"1",
    "level":1
},
{
    "element_id": "Element4",
    "node_type": "TypeAB",
    "rama:":"1",
    "level":2
},
{
    "element_id": "Element5",
    "node_type": "TypeAC",
    "rama:":"1",
    "level":3
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar