Для школьного задания мне нужно выполнить несколько запросов 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" в поле соответствия, агрегация прошла успешно, и я понятия не имею, почему она ведет себя так.
Заранее спасибо.
Ошибка показывает, что вы используете операторы даты MongoDB (в данном случае $month
и $year
) для строкового типа. Сделайте db.salesdetails.findOne()
и db.salesdetails.findOne()
результат. Я полагаю, что у вас есть строковое значение в поле OrderDate вместо даты (ISODate(...))
Я проверил на Compass и Robo 3T, что ваш агрегатный конвейер работает, если тип данных правильный.