【发布时间】:2021-12-14 00:33:39
【问题描述】:
所以我有这个架构,它具有数据库中其他集合的外键。该文档有大约 60k 个帖子,每个帖子可以有多个类别,大约有 200 个类别。因此,我尝试根据类别的外键获取和构造数据,并填充类别详细信息和计数。
主架构和类别架构如下所示:
const postSchema = new mongoose.Schema( {
post: {
type: mongoose.Schema.Types.ObjectId,
ref: 'PostDetails'
},
categories: [ {
category: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Category'
},
subCategories: [ {
subCategory: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Subcategory'
}
} ]
} ]
} );
const categorySchema = new mongoose.Schema( {
category: {
type: String,
},
categorySlug: {
type: String,
}
} );
我计数成功,但返回的数据不是我预期的。返回的数据显示类别的 id 和计数,但没有名称和 slug。下面是它的样子:
[
{
"_id": [
"617acfd232c766589c23a90c"
],
"count": 876,
"category": []
}
]
我通过以下查询得到了上述输出:
const aggregateStages = [
{
$group: {
_id: '$categories.category',
count: { $sum: 1 }
}
},
{
$lookup: {
from: "Category",
localField: "categories.category",
foreignField: "_id",
as: "category"
}
}
];
const categories = await Post.aggregate( aggregateStages ).exec();
我希望得到如下数据:
[
{
"_id": "617acfd232c766589c23a90c",
"count": 876,
"category": 'SomeCategory',
"categorySlug": 'some-category'
}
]
我哪里出错了,我该如何解决?
MATT OESTREICH 要求的数据库中的样本数据
POST DATA
{
"_id": "617adad39054bae2c983c34f",
"post": "617ad1c80597c78ed4cc151e",
"author": "617acc689b309fdbbbdfdfe0",
"categories": [{
"category": "617acfd232c766589c23a8d1",
"subCategories":[]
}]
}
CATEGORY DATA
{
"_id": "617acfd232c766589c23a8d1",
"category": "Lorem Ipsum",
"categorySlug": "lorem-ipsum"
}
【问题讨论】:
-
您能提供一些您收藏的样本数据吗?甚至不知道您的数据具有哪些字段等,都很难提供帮助......计数起作用的原因是因为您在查找之前计数并且查找没有找到任何内容,因此问题在您的查找范围内。
-
嗨,马特。我已经用示例数据更新了帖子。请看一看。
-
似乎 $lookup 不起作用。我注释掉了小组赛阶段并仅尝试使用 $lookup 但它没有填充。
-
嘿伙计,有什么解决办法吗? @MattOestreich
-
现在看看 - 抱歉,我直到现在才有机会。
标签: mongodb mongoose mongodb-query aggregation-framework