1
這是一本學習指南中的可選複習題,不值得讚揚。我試圖找出在春季和秋季採取的計算機科學課程的數量與每個學生身份證相結合。僅此查詢所需要的區域的例子文件:Mongo中單個對象的數組元素的條件和
> db.students.find().limit(1).pretty();
{
"_id" : 10456673,
"major" : "CSC",
"fall" : {
"units" : 12,
"courses" : [
"CSC 365",
"CSC 419",
"MATH 428"
]
},
"spring" : {
"units" : 16,
"courses" : [
"CSC 430",
"CSC 453",
"BIO 161",
"HIST 217"
]
}
}
我相信是我到目前爲止寫得最好的部分查詢:
db.students.aggregate(
{
$unwind: "$fall.courses"
},
{
$match: {
"fall.courses": {
$in: ["CSC 103", "CSC 225", "CSC 349", "CSC 357", "CSC 365", "CSC 419", "CSC 430", "CSC 453"]
}
}
},
{
$group: {
"_id": {
"id": "$_id",
"spring": "$spring.courses",
"major": "$major"
},
"fallCsc": {
$sum: 1
}
}
},
{
$unwind: "$_id.spring"
}
);
此輸出:
{ "_id" : { "id" : 10048392, "spring" : "EE 461", "major" : "EE" }, "fallCsc" : 1 }
{ "_id" : { "id" : 10048392, "spring" : "CSC 315", "major" : "EE" }, "fallCsc" : 1 }
{ "_id" : { "id" : 10048392, "spring" : "CHM 231", "major" : "EE" }, "fallCsc" : 1 }
{ "_id" : { "id" : 72039451, "spring" : "CSC 357", "major" : "CSC" }, "fallCsc" : 2 }
{ "_id" : { "id" : 72039451, "spring" : "CSC 349", "major" : "CSC" }, "fallCsc" : 2 }
{ "_id" : { "id" : 72039451, "spring" : "STAT 312", "major" : "CSC" }, "fallCsc" : 2 }
{ "_id" : { "id" : 72039451, "spring" : "KIN 223", "major" : "CSC" }, "fallCsc" : 2 }
{ "_id" : { "id" : 10456673, "spring" : "CSC 430", "major" : "CSC" }, "fallCsc" : 2 }
{ "_id" : { "id" : 10456673, "spring" : "CSC 453", "major" : "CSC" }, "fallCsc" : 2 }
{ "_id" : { "id" : 10456673, "spring" : "BIO 161", "major" : "CSC" }, "fallCsc" : 2 }
{ "_id" : { "id" : 10456673, "spring" : "HIST 217", "major" : "CSC" }, "fallCsc" : 2 }
但是,我不明白如何計算CSC彈簧類的數量並將其添加到fallCsc值而不會丟失未採用CSC的學生的跌落值在春季班,但在秋季。
這個問題時,我嘗試$match
CSC類只以上的春天場,然後通過$group
學生證時,$sum
鳴春CSC類分組的學生。如果$match
刪除學生ID採取的所有類,他們根本不在分組結果。
如何避免失去這些學生,或者這是錯誤的做法?
編輯:另外,好像我需要有條件$sum
我$group
僅由學生證,存儲領域爲springCsc
和$project
通過與fallCsc值相結合的最終價值,但我不能讓$sum
到與$cond
一起工作。
由於某種原因我找不到$ concatArrays操作符!感謝您的幫助。我驗證了查詢在我的數據集上按預期工作。 –