использование агрегации MongoDB

#node.js #mongodb #aggregate #mongo-shell

#node.js #mongodb #агрегировать #mongo-оболочка

Вопрос:

Я пытаюсь использовать .aggregate() с другими методами оболочки mongo, и я получил необработанное предупреждение PROMISEREJECTIONWARNING: TypeError: User.find(…).select(…).sort (…).aggregate не является функцией

 const users = await User
            .find(findParams)
            .select(userResponse)
            .sort(sortParams)
            .aggregate(([
                {
                    $project:{
                        dateCreated: {$dateToString: {format: "%G-%m-%d %H:%M:%S", date: "$dateCreated"}},
                    }
                }
            ]))
            .exec()
  

Но, когда я использую .aggregate() без других методов, он работает идеально.

 const users = await User
            .aggregate(([
                {
                    $project:{
                        dateCreated: {$dateToString: {format: "%G-%m-%d %H:%M:%S", date: "$dateCreated"}},
                    }
                }
            ]))
            .exec()
  

Могу ли я вставить его другими методами, но без получения этой ошибки.
Спасибо

Ответ №1:

В первом блоке кода вы пытаетесь применить метод db.collection.aggregate() к курсору, который возвращается методом find(). Курсоры — это те, которые в основном возвращаются из методов сбора, таких как find(), aggregate() и больше здесь.

Во втором блоке кода вы непосредственно применяете aggregate() к коллекции User. Вот почему это работает. И да, вы можете делать все, что угодно, выбирать, сортировать, ограничивать с помощью aggregate(), даже не используя эти методы курсора здесь. Надеюсь, это поможет, чувак. Хорошего дня!

скриншот страницы документации MongoDB