gpt4 book ai didi

node.js - 聚合组上的 Mongoose 错误

转载 作者:可可西里 更新时间:2023-11-01 09:44:01 26 4
gpt4 key购买 nike

我有这个模型:

var Chat = new Schema({
from: String,
to: String,
satopId: String,
createdAt: Date
});
var Chat = mongoose.model('Chat', Chat);

我想做一个查询来执行一个查询,该查询返回在按往返字段分组时创建的最大值。我试过:

Chat.aggregate([
{
$group: {
_id: '$to',
from: '$from',
createdAt: {
$max: '$createdAt'
}
}
},
{
$project: {
_id: 1,
createdAt: 1,
from: 1,
to: 1
}
}
], function(err, docs){

})

但这会产生这个错误:

the group aggregate field 'from' must be defined as an expression inside an object

我不明白这是什么意思。我该如何解决?

谢谢

最佳答案

如果 $group 中的 _id 表达式,任何“外部”内容语句需要 "grouping operator"某种形式。

假设您对将“唯一”分组键作为文档中“收件人”字段的想法感到满意,那么您可能需要类似 $first 的内容:

    Chat.aggregate([
{ "$group": {
"_id": "$to",
"from": { "$first": "$from" },
"createdAt": { "$max": "$createdAt" }
}},
function (err, docs) {
// do something here
}
])

否则,如果您希望“两个”字段上的“不同”值,那么它们都属于分组键的复合值:

    Chat.aggregate([
{ "$group": {
"_id": {
"to": "$to",
"from": "$from"
},
"createdAt": { "$max": "$createdAt" }
}},
function (err, docs) {
// do something here
}
])

这基本上就是它的工作原理。它要么是键的一部分,要么像 SQL 一样需要分组运算符。

另请注意,您的 $project断言并不是真正需要的 $group已经完成了您在那里的要求。

关于node.js - 聚合组上的 Mongoose 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28806251/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com