所以我有這個模式,它有資料庫中其他集合的外鍵。該檔案有大約 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"
}
uj5u.com熱心網友回復:
好的,看起來您可以通過使用$size運算子來解決此問題。該$size運算子將為您提供陣列中元素的長度(或計數)。
現場演示在這里
資料庫
db={
"post": [
{
"_id": ObjectId("617adad39054bae2c983c34f"),
"post": ObjectId("617ad1c80597c78ed4cc151e"),
"author": ObjectId("617acc689b309fdbbbdfdfe0"),
"categories": [
{
"category": ObjectId("617acfd232c766589c23a8d1"),
"subCategories": []
}
]
}
],
"categories": [
{
"_id": ObjectId("617acfd232c766589c23a8d1"),
"category": "Lorem Ipsum",
"categorySlug": "lorem-ipsum"
}
]
}
詢問
db.post.aggregate([
{
"$lookup": {
"from": "categories",
"localField": "categories.category",
"foreignField": "_id",
"as": "found_categories"
}
},
{
"$project": {
_id: "$_id",
count: {
"$size": "$found_categories"
},
"category": {
"$first": "$found_categories.category"
},
"categorySlug": {
"$first": "$found_categories.categorySlug"
}
}
}
])
結果
[
{
"_id": ObjectId("617adad39054bae2c983c34f"),
"category": "Lorem Ipsum",
"categorySlug": "lorem-ipsum",
"count": 1
}
]
雖然,如果找到多個類別,我不相信這會給你你正在尋找的東西。如果它不起作用,請告訴我,我會盡力幫助修復它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/343596.html
標籤:MongoDB 猫鼬 mongodb-查询 聚合框架
上一篇:如何在模型中添加多個專案
