Проблема с агрегатной функцией MongoDB, получение сообщения об ошибках, не понимая, почему

1

Для школьного задания мне нужно выполнить несколько запросов MongoDB, касающихся конкретных проблем, связанных с продажами, и их подробностей. Теперь у меня проблема, с которой я не сталкивался раньше, и совершенно новое для Монго не помогает.

Я использовал Robo 3t, чтобы помочь мне в этой задаче, и я не смог никуда добраться, попробовав несколько решений. Я также не могу найти проблему в Интернете, поэтому я спрашиваю здесь. Итак, код выглядит следующим образом:

db.salesdetails.aggregate(
[   
    {
        $project: {
            month: { $month: "$OrderDate" },
            year: { $year: "$OrderDate" },
            store:{$toInt:"$Store"},
            ReceiptID:1,
            _id:0
        }
    },
    {
        $match: {

            month: 05, 
            year: 2011,
            store:1046

        }
    }
])

Ожидаемым выводом будет Store (целое число, как отмечено), месяц, год и идентификатор квитанции, которые попадают в указанный период времени и хранилище. Однако вместо того, чтобы вернуть его, я получаю следующую ошибку:

https://i.imgur.com/NIYnelc.png

После того, как я удалил "store: 1046" в поле соответствия, агрегация прошла успешно, и я понятия не имею, почему она ведет себя так.

Заранее спасибо.

  • 0
    Возможно, стоит начать сначала с конвейера сопоставления, не преобразовывая хранилище в int, а затем проецировать после фильтрации.
  • 0
    Проблема в том, что мне нужны месяц и год в матче, чтобы я мог использовать запрос по назначению, то есть проверить данные за определенный период времени.
Показать ещё 4 комментария
Теги:
aggregation-framework

1 ответ

0

Ошибка показывает, что вы используете операторы даты MongoDB (в данном случае $month и $year) для строкового типа. Сделайте db.salesdetails.findOne() и db.salesdetails.findOne() результат. Я полагаю, что у вас есть строковое значение в поле OrderDate вместо даты (ISODate(...)) Я проверил на Compass и Robo 3T, что ваш агрегатный конвейер работает, если тип данных правильный.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню