使用聚合MongoDB

问题描述

我试图将.aggregate()与其他mongo shell方法一起使用,但我得到了 UnhandledPromiseRejectionWarning: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",}
                }
            ]))
            .exec()

我可以用其他方法插入它,但不会出现此错误。 谢谢

解决方法

在第一段代码中,您尝试将db.collection.aggregate()方法应用于由find()方法返回的游标。游标基本上是从诸如find(),aggregate()和more here之类的集合方法返回的。

在第二个代码块中,您将直接在 User 集合上应用aggregate()。这就是为什么它起作用。是的,即使不使用那些游标方法here,也可以使用aggregate()进行选择,排序和限制的任何操作。希望这会有所帮助,杜德。祝你有美好的一天!

MongoDB documentation page screenshot