Задать вопрос
AlexZeDim
@AlexZeDim

MongoDB + mongoose + nodejs агрегация данных и математические операции?

Всем привет

В приложение на nodejs (с другого сервера, через request) приходят данные (в JSON) и .inset'ятся в mongodb через mongoose.

Где проблема: иногда приходится выводить очень "экзотические массивы данных", из моей базы на mongo например:
у моих документов( и в импортированном JSON) есть поля "total_price" (что вроде суммы чека) и "quantity", но нет "цены за штуку", и стоит вопрос в том, как сделать/вывести это поле.
или
необходимо вывести определенные документы по названию и "timestamp" а затем просуммировать поле "quantity" у выведенного массива.

Вопрос стоит в том, а умеет ли это делать Mongodb сама? А не внешними средствами. К примеру, согласно офицальной документации, для решения первой проблемы нет ничего проще, чем вызвать через mongo shell:
db.имя_коллекции.aggregate(
    [
        { $project: { name: 1, Price: { $divide: [ "total_price", "quantity" ] } } }
    ]
);

но проблема в том, что на сайте с документацией к mongoose, нет практически ни слова об агрегации и арифметических операциях.

Так в чем же дело, я слишком много хочу от mongoose и он просто не умеет в агрегацию и математические операции? (к примеру, в Math.floor и Math.ceil mongo пока не умеет) Или, я - дурак и просто смотрю не туда и не понимаю принцип использоваия драйверов? Где, то-самое место, куда необходимо вставить этот чудесный mongo-native-shell-code в Mongoose (что-бы как с SQL, раз и готово) ? Или необходимо использовать Mongo Native Driver для этих целей?
Или же все ещё хуже, и при придется каждый раз вызывать
.find({ условие:здесь }, null, {sort: 'отсортируюкакнибудь'},function (err, res) 
   получать выборку от базы в JSON и оперировать уже с ней/res (мат.операции и т.д.), 
а затем запихивать все назад в базу через .insert;
  • Вопрос задан
  • 1904 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@emp1re
mongoose это odm, никто не говорил что нельзя агрегацию на sсhema mongoose использовать.
Сам юзаю mongoose только для валидации данных, и то это уже так же реализованое в нативном драйвере.
по поводу кода что-то в таком духе
user.aggregate([...])
где user = new mongoose.Schema('User')
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы