【发布时间】:2020-01-17 13:08:39
【问题描述】:
我有以下分类集合
{
"_id" : ObjectId("5e1d8c3ed06661d2b06a7c46"),
"status" : "active",
"noOfLevels" : 3,
"levels" : [
ObjectId("5e1db2237a265cfe50dfdb18"),
ObjectId("5e1db22b7a265cfe50dfdb19"),
ObjectId("5e1db23b7a265cfe50dfdb1a")
],
"name" : "Fuel",
},
{
"_id" : ObjectId("5e1d8c3ed06661d2b06a7c46"),
"status" : "active",
"noOfLevels" : 3,
"levels" : [
ObjectId("5e1db2237a265cfe50dfdb18"),
ObjectId("5e1db22b7a265cfe50dfdb19"),
ObjectId("5e1db23b7a265cfe50dfdb1a")
],
"name" : "Feeds",
}
在上述集合级别中,_id 已被存储为以后填充的参考。
关卡集合有这个项目:-
{
levelName: { type: String, required: true },
levelDesc: { type: String },
levelNo: { type: Number, required: true },
categoryId: { type: Mongoose.Schema.Types.ObjectId, ref: 'trainingCategories', required: true },
videoId: [{ type: Mongoose.Schema.Types.ObjectId, ref: 'trainingVideoMaster' }],
},
{
levelName: { type: String, required: true },
levelDesc: { type: String },
levelNo: { type: Number, required: true },
categoryId: { type: Mongoose.Schema.Types.ObjectId, ref: 'trainingCategories', required: true },
videoId: [{ type: Mongoose.Schema.Types.ObjectId, ref: 'trainingVideoMaster' }],
}
我正在使用聚合和查找来查找类别集合中的项目,在我的最终结果中,我需要特定类别的每个级别上存在的 videoIds 的计数。
需要这样的最终结果:-
{
name: 'How to save fuel',
catNo: 1,
noOfLevels: 3,
totalVideos: 4
},
{
name: 'Feeds',
catNo: 2,
noOfLevels: 3,
totalVideos: 3
}
【问题讨论】:
-
请展示您的尝试
-
@Ashh 类似这样 Cat.aggregate([ { $match: {status: 'active' }}, { $lookup: {from: 'traininglevels', localField: 'levels', foreignField: '_id', as: 'trainingLevels'} }, { "$project": { noOfLevels: 1, name: 1, catNo: 1, createdAt: 1, trainingLevels: {$sum:'$trainingLevels.videoId'} }} ]) 但我知道它不符合聚合方案。
标签: node.js mongodb aggregation-framework lookup