Проблема с агрегатной функцией MongoDB, получение сообщения об ошибках, не понимая, почему - PullRequest
0 голосов
/ 10 января 2019

Для школьного задания мне нужно выполнить несколько запросов 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» в поле совпадения, агрегация оказывается успешной, и я понятия не имею, почему она ведет себя так.

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

1 Ответ

0 голосов
/ 13 января 2019

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

...