mongoDB - CONSULTA SIMILAR DE ORACLE A MONGODB

 
Vista:
sin imagen de perfil

CONSULTA SIMILAR DE ORACLE A MONGODB

Publicado por Antonio (3 intervenciones) el 09/01/2018 02:03:09
Buenas noches tengo la siguiente fracción de código de SQL:

1
WHERE ABS(imp_variacion_total) BETWEEN 0 AND 1000;

¿Cómo puedo hacerlo en mongoShell?
Tenía algo como esto pero el $match no reconoce la función ABS, la tengo que poner forzosamente en en $project y ahí ya no haría el filtro:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
db.PRIN_CLIENTE.aggregate([{
    $match:{
        IMP_VARIACION_DIA:{$abs:["$IMP_VARIACION_DIA"]}, //Esto es lo que no toma en cuenta
        "IMP_VARIACION_DIA": {$gte:0, $lte:1000},
        $and:[
            {"COD_REGION":1000},
            {"COD_ZONA": 1100},
                  ]
        }
},{
             $project:{
                 plus_todo:1,
                 plus_con:1,
                 plus_sin:1,
                 _id:0
            }
}])
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
sin imagen de perfil
Val: 40
Ha aumentado 1 puesto en mongoDB (en relación al último mes)
Gráfica de mongoDB

CONSULTA SIMILAR DE ORACLE A MONGODB

Publicado por Andrés (14 intervenciones) el 11/01/2018 15:40:18
puedes agregar un documento de ejemplo?
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

CONSULTA SIMILAR DE ORACLE A MONGODB

Publicado por Antonio (3 intervenciones) el 11/01/2018 23:30:10
Ya lo solucioné hace algún tiempo, subo la parte del código quizá ayude a alguien :)


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
db.PRIN_CLIENTE.aggregate([{
    $project:{
        variacion:{$abs:["$IMP_VARIACION_DIA"]},
        COD_REGION:1,
        COD_ZONA:1,
        IND_SANTANDER_PLUS:1
        }
    },{
    $match:{
        variacion: {$gte:1, $lte:100},
        $and:[
            {COD_REGION:1000},
            {COD_ZONA: 1100},
            {IND_SANTANDER_PLUS: 1},
             {$or:[
                         {"IND_SEG_SELECT":1},
                         {"IND_SEG_PREMIER":1},
                         {"IND_SEG_PREFERENTE":1},
                         {"IND_SEG_CLASICO":1},
                         ]}
                ]
        }
},{
            $group:{
                _id:"$COD_ZONA",
                plus_todo:{$sum:{$cond: { if: {$eq: ["$IND_SANTANDER_PLUS", null] }, then: 0, else: 1}}},
                plus_con:{$sum:{$cond: { if: {$eq: ["$IND_SANTANDER_PLUS", 1] }, then: 1, else: 0}}},
                plus_sin:{$sum:{$cond: { if: {$eq: ["$IND_SANTANDER_PLUS", 1] }, then: 0, else: 1}}},
           }
},{
             $project:{
                 plus_todo:1,
                 plus_con:1,
                 plus_sin:1,
                 _id:0
            }
}])

El primer $project me saca el valor ablosuto de toda la columna que necesito, después entra el $match que es la función del BETWEEN con los operadores $gte y $lte y bueno agregue otros filtros, el group me hace la suma de todos los campos que sean 1 (binarios) o 0 dependiendo lo que quiera contar si 1 o 0.
Por último solo pinte los campos que quería con el siguiente $project .

NOTA: Si por ejemplo en el $match hacía un filtro tenía que agregar esa columna en la parte del primer $project si no no me hace el cálculo.

Saludos espero les sirva.
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