【发布时间】:2023-03-12 13:44:01
【问题描述】:
我有一个如下所示的聚合:
userSchema.statics.getCounts = function (req, type) {
return this.aggregate([
{ $match: { organization: req.user.organization._id } },
{
$lookup: {
from: 'tickets', localField: `${type}Tickets`, foreignField: '_id', as: `${type}_tickets`,
},
},
{ $unwind: `$${type}_tickets` },
{ $match: { [`${type}_tickets.createdAt`]: { $gte: new Date(moment().subtract(4, 'd').startOf('day').utc()), $lt: new Date(moment().endOf('day').utc()) } } },
{
$group: {
_id: {
groupDate: {
$dateFromParts: {
year: { $year: `$${type}_tickets.createdAt` },
month: { $month: `$${type}_tickets.createdAt` },
day: { $dayOfMonth: `$${type}_tickets.createdAt` },
},
},
userId: `$${type}_tickets.assignee_id`,
},
ticketCount: {
$sum: 1,
},
},
},
{
$sort: { '_id.groupDate': -1 },
},
{ $group: { _id: '$_id.userId', data: { $push: { groupDate: '$_id.groupDate', ticketCount: '$ticketCount' } } } },
]);
};
输出数据如下:
[
{
_id: 5aeb6b71709f43359e0888bb,
data: [
{ "groupDate": 2018-05-07T00:00:000Z", ticketCount: 4 }
}
]
不过,理想情况下,我会有这样的数据:
[
{
_id: 5aeb6b71709f43359e0888bb,
data: [
{ "groupDate": 2018-05-07T00:00:000Z", assignedCount: 4, resolvedCount: 8 }
}
]
不同之处在于用户的对象将输出每个日期分配的工单总数和已解决工单的总数。
我的 userSchema 是这样的:
const userSchema = new Schema({
firstName: String,
lastName: String,
assignedTickets: [
{
type: mongoose.Schema.ObjectId,
ref: 'Ticket',
index: true,
},
],
resolvedTickets: [
{
type: mongoose.Schema.ObjectId,
ref: 'Ticket',
index: true,
},
],
}, {
timestamps: true,
});
一个示例用户文档是这样的:
{
"_id": "5aeb6b71709f43359e0888bb",
"assignedTickets": ["5aeb6ba7709f43359e0888bd", "5aeb6bf3709f43359e0888c2", "5aec7e0adcdd76b57af9e889"],
"resolvedTickets": ["5aeb6bc2709f43359e0888be", "5aeb6bc2709f43359e0888bf"],
"firstName": "Name",
"lastName": "Surname",
}
票证文件示例如下:
{
"_id": "5aeb6ba7709f43359e0888bd",
"ticket_id": 120292,
"type": "assigned",
"status": "Pending",
"assignee_email": "email@gmail.com",
"assignee_id": "5aeb6b71709f43359e0888bb",
"createdAt": "2018-05-02T20:05:59.147Z",
"updatedAt": "2018-05-03T20:05:59.147Z",
}
我尝试添加多个查找和分组阶段,但我不断得到一个空数组。如果我只进行一次查找和一组,我会得到正确的搜索字段计数,但我希望在一个查询中同时包含这两个字段。是否可以在两次查找中使用查询组?
【问题讨论】:
-
如果您可以生成一小部分可以从中获得预期结果的文档样本,这将对您的问题有所帮助。然后人们可以以与您演示如何返回所需结果相同的方式实际使用它。请参阅How to create a Minimal, Complete, and Verifiable example,这是我们希望您阅读的帮助中心的内容,它将帮助您更好、更及时地回答您的问题。
-
使用示例用户文档和示例工单文档更新问题。
-
这更好,但实际上您应该展示“再现预期结果”的内容。例如,如果您希望看到
assignedCount: 4, resolvedCount: 8,那么您在问题中包含的文档应该包含足够的信息,以便能够“重现”该结果。它还可以帮助您显示从mongoshell 查看的文档,因为这样人们可以简单地复制和粘贴内容并直接使用它。
标签: mongodb mongoose mongodb-query aggregation-framework