これは、学習ガイドのオプションのレビュー問題です。私は、春と秋に撮影されたコンピュータサイエンスコースの数を、各学生IDとその専攻と合わせて調べようとしています。このクエリのためだけに必要なフィールドを持つ文書例:Mongoの単一オブジェクト上の配列要素の条件付き合計
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 }
を、私は私がこれまで書いてきた最高の部分クエリであると信じる何
> 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"
]
}
}
しかし、今私はどのようにCSCの春のクラスの数をカウントし、CSCを取っていない学生の秋の値を失うことなく、fallCscの値、に追加する方法を理解していない春の授業は、秋にはです。
この問題は、上記のスプリングフィールドのみのCSCクラスと、$group
の学生ID、$sum
グループ化された生徒の春のCSCクラスを作成しようとすると発生します。 $match
が生徒IDによって取得されたすべてのクラスを削除した場合、グループ化された結果にはまったく含まれていません。
これらの生徒を失うことを避けるにはどうすればよいのですか、これが間違ったアプローチですか?
編集:また、私が必要とするように思えるの条件付き$sum
としてIのみ学生証、springCsc
と$project
fallCsc値と組み合わせることにより、最終的な値としてフィールドを格納しますが、私は$sum
を得ることができないことで$group
$cond
で作業してください。
何らかの理由で$ concatArrays演算子が見つかりませんでした。ご協力ありがとうございました。私はクエリが私のデータセットで期待通りに動作することを確認しました。 –