我有这个型号:
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){
})
但这会产生此错误:
来自'的群组聚合字段'必须定义为表达式 在一个对象里面
我不明白这是什么意思。我该如何解决?
由于
答案 0 :(得分:2)
任何"外面"如果$group
语句中的_id
表达式需要某种"grouping operator"。
假设您对" sole"的想法感到满意。将键分组为"到"在您的文档中的字段,然后您可能需要$first
:
Chat.aggregate([
{ "$group": {
"_id": "$to",
"from": { "$first": "$from" },
"createdAt": { "$max": "$createdAt" }
}},
function (err, docs) {
// do something here
}
])
否则,如果你想要" distinct" "两者的价值"然后它们都属于分组键的复合值:
Chat.aggregate([
{ "$group": {
"_id": {
"to": "$to",
"from": "$from"
},
"createdAt": { "$max": "$createdAt" }
}},
function (err, docs) {
// do something here
}
])
基本上它是如何运作的。要么它是键的一部分,要么就像SQL一样需要分组操作符。