Я использую собственный драйвер MongoDB в приложении NodeJS.Обновление нескольких документов в коллекции с использованием футляра-переключателя
У меня есть коллекция shifts
в моей базе данных, что мне нужно обновить. Примеры документы в моей коллекции сдвигами
{
"_id" : ObjectId("588425105560bd2ba0065fa4"),
"from" : ISODate("2017-01-23T03:20:00.000Z"),
"to" : ISODate("2017-01-23T06:20:00.000Z"),
"jobId" : ObjectId("586efda790541421b0432897"),
"hourlyRate" : 15
}
{
"_id" : ObjectId("588425105560bd2ba0065fa5"),
"from" : ISODate("2017-01-25T03:20:00.000Z"),
"to" : ISODate("2017-01-25T06:20:00.000Z"),
"jobId" : ObjectId("586efda790541421b0432897"),
"hourlyRate" : 15
}
Что мне нужно сделать, это следующее -
Обновление hourlyRate
всех документы, которые удовлетворяют условиям:
- Сопрягайте JobId (который легко)
- установить
hourlyRate
= 20, еслиfrom
является Будний - установить
hourlyRate
= 25, еслиfrom
является суббота - установить
hourlyRate
= 30, еслиfrom
это воскресенье
Я хотел бы сделать это в одном запросе, насколько это возможно.
Мое решение до сих пор:
Используйте переключатель случая и определить тип дня, используя $dayOfWeek
от функции агрегирования Дата. Тем не менее, я не могу комбинировать коммутатор с updateMany
.
Любая помощь будет оценена по достоинству.
Awesome man .... Работает как шарм .. Спасибо ... – jerry
Я просто тестировал его снова, и я понял, что выполнение этого запроса перезаписывает все документы в коллекции смен. Например, если я выполнил вышеупомянутый запрос с критериями соответствия $ для jobId = 1, то он корректно обновит все документы для jobId = 1, но в то же время удаляются все остальные документы! Можете ли вы проверить это? Спасибо – jerry
Пожалуйста, проверьте мой вопрос, чтобы узнать, как я использую $ match в агрегации. Я использую версию вашего ответа $ addFields (тот, который предназначен для mongo 3.4) – jerry