Mondogb $ sum не работает с SchemaTypes. Double - PullRequest
0 голосов
/ 17 марта 2020

Я довольно новичок в MongoDB и Mon goose, и я работаю над ошибкой здесь. Очевидно, $sum не работает с полем, тип которого SchemaTypes.Double. Этот двойной тип доступен благодаря пакету под названием mongoose-double.

. Я не знаю, поддерживает ли MongoDB Double, поэтому у нас есть этот пакет, или это из-за версии MongoDB (он включен 3.6 AFAIK). Но в любом случае вот код:

Schedule.aggregate([{
    $match: findTerm
  },
  {
    $facet: {
      totalizer: [{
        $group: {
          _id: '$store',
          totalServices: {
            $sum: 1
          },
          totalValue: {
            $sum: '$value'
          },
          totalComission: {
            $sum: '$comissionValue'
          }
        }
      }
      ],
      data: [{
        $project: {
          'employee.name': 1,
          'customer.name': 1,
          'service.name': 1,
          'info.channel': 1,
          value: 1,
          scheduleDate: 1,
          scheduleStart: 1,
          scheduleEnd: 1,
          comissionValue: 1,
          status: 1,
          paymentMethod: 1
        }
      },
      {
        $sort: sort
      },
      {
        $skip: req.body.limit * req.body.page
      },
      {
        $limit: req.body.limit
      }
      ]
    }
  }
  ]).exec((e, response) => {
    if (e) {
      // handle error
    }
    res.status(200).send(response[0]);
  });

Этот findTerm отправляется приложением внешнего интерфейса и имеет следующий формат:

{ store: '5b16cceb56a44e2f6cd0324b',
  status: { '$in': [ 0, 1, 2, 3 ] },
  paymentMethod: { '$in': [ 0, 1, 2, 3, 4, 5 ] },
  'info.channel': { '$in': [ 'app', 'admin' ] },
  scheduleStart: { '$gte': '2019-11-01 00:00' },
  scheduleEnd: { '$lte': '2020-03-31 23:59' }
}

Мое поле comissionValue находится в root из моей схемы расписаний:

comissionValue: {
  type: SchemaTypes.Double,
  default: 0
},

Но мой результат следующий, как показано в моем console.log во внешнем интерфейсе Results

Как вы можете вижу, что мой totalComission внутри моего totalizer равен null, но мой первый объект внутри data имеет comissionValue из 0.6. Как я могу знать, что здесь не так? Я пробовал разные комбинации $facet, фильтруя только расписания, которые имеют comissionValue, не равное 0 и ноль, но я получил только результат 0 для totalComission.

EDIT

Вот некоторые примеры данных:

Объект расписания:

customer: {
  id: "5e41a7ba11340930742aa689",
  name: "renan  lima",
  phone: "+5511999999999",
  email: "sampleemail@gmail.com",
  doc: "00000000000",
  avatar: null
},
employee: {
  id: "5b16cebd29bcf613f02b6fb4",
  name: "Anderson Zanardi",
  avatar: "anderson.jpg"
},
service: {
  noValue: false,
  filters: [],
  id: "5b637acd634e14086c9a3aea",
  name: "Barba Masculina"
},
info: {
  channel: "app",
  id: "5e41a7ba11340930742aa689",
  name: "renan  lima"
},
comissionType: null,
comissionValue: 0,
paymentMethod: 0,
_id: "5e41a7c011340930742aa68a",
store: "5b16cceb56a44e2f6cd0324b",
scheduleDate: "2020-03-16T15:00:00.000Z",
scheduleStart: "2020-03-16 09:00",
scheduleEnd: "2020-03-16 09:30",
status: 2,
value: 30,
color: "blue",
logStatus: [],
__v: 0,
created: "2020-02-10T18:58:08.845Z",
updated: "2020-02-10T18:58:08.845Z"

Мой ответ получен за Schedule.aggregate:

{
  "totalizer": [{
    "_id": null,
    "storesCount": [{
      "store": "5b16cceb56a44e2f6cd0324b",
      "count": 12
    }],
    "totalValue": 410.5,
    "totalServices": 12,
    "totalComission": 75
  }],
  "data": [{
    "_id": "5e5d04dcb4a2f42204598ebf",
    "service": {
      "name": "Outros"
    },
    "info": {
      "channel": "admin"
    },
    "comissionValue": 0,
    "paymentMethod": 0,
    "customer": {
      "name": "teste"
    },
    "employee": {
      "name": "Gabriel Barreto"
    },
    "scheduleDate": "2020-03-02T13:06:00.000Z",
    "scheduleStart": "2020-03-02 10:06",
    "scheduleEnd": "2020-03-02 10:36",
    "status": 0,
    "value": null
  }]
}

Здесь комиссия 75, я не знаю, из-за scheduleStart и scheduleDate в findTerm на моем $match, что это время начинается в 2020-03-01 и заканчивается в 2020-03-31 и в этом диапазоне Есть 3 графика с 25 комиссионных. Может быть, моя нумерация страниц возвращает его в ноль? Поскольку мне нужно, чтобы он суммировал все мои комиссионные за заданный диапазон начала / конца, даже если на определенной странице нет комиссионных.

РЕДАКТИРОВАТЬ 2

Я добавил пример данных в Mon go Playground массив расписаний в столбце конфигурации соответствует запросу, используемому в свойстве $ match столбца запроса. Вот ссылка: https://mongoplayground.net/p/nmyAsY4g7LS

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...