Mongo服务器错误: 未知组操作员"$top"



我正在使用mongoose ORM查询我的mongodb数据库。我在使用聚合时遇到了一个问题。我是mongodb的新手。我正在使用这个管道为聊天应用程序过滤特定用户的聊天。

MongoServerError: unknown group operator '$top'

我的聚合查询如下。

aggregate([
{
$match: {
users: ObjectId("<UserID>")
}
},
{
$group: {
_id: "$users",
out: {
$top: {
output: {
_id: "$_id",
content: "$content",
fromUser: "$fromUser",
toUser: "$toUser",
users: "$users",
messageRead: "$messageRead",
createdAt: "$createdAt"
},
sortBy: {
createdAt: -1
}
}
}
}
},
{
"$replaceRoot": {
"newRoot": "$out"
}
}
])

我同意@nimrod-serok在评论中所描述的实际错误几乎可以肯定是版本不匹配。在Atlas中检查集群的配置,以确认它在6.0上。

也就是说,我认为你可能会以完全不同的方式处理这次行动。如果我正确地解释了聚合,那么目的是为最近的createdAt找到一个具有给定值的users字段的单个文档。如果是,则根本不需要$group和随后的$replaceRoot

相反,只需考虑先做$sort,然后再做{$limit: 1}。如果您在{ users: 1, createdAt: -1 }上另外有一个索引,那么操作应该非常有效。这是一个展示这种方法的操场。

与此相关的是,可能值得注意的是,这种替代方法可以使用简单的find()(使用.sort().limit()(来处理,而不是使用完整的聚合框架。两者都应该是完全可以接受的。

最新更新