【发布时间】:2015-09-19 02:27:08
【问题描述】:
我现在正在与编辑作斗争,但我不确定是否理解它。
我刚刚阅读了文档并尝试在集合等级上使用编辑(它来自 mongodb 在线培训)
“等级”集合中的文档如下所示:
{
"_id" : ObjectId("50b59cd75bed76f46522c34e"),
"student_id" : 0,
"class_id" : 2,
"scores" : [
{
"type" : "exam",
"score" : 57.92947112575566
},
{
"type" : "quiz",
"score" : 21.24542588206755
},
{
"type" : "homework",
"score" : 68.19567810587429
},
{
"type" : "homework",
"score" : 67.95019716560351
},
{
"type" : "homework",
"score" : 18.81037253352722
}
]
}
我使用以下查询:
db.grades.aggregate([
{ $match: { student_id: 0 } },
{
$redact: {
$cond: {
if: { $eq: [ "$type" , "exam" ] },
then: "$$PRUNE",
else: "$$DESCEND"
}
}
}
] );
通过这个查询,每找到一个考试类型,这个子文档应该被排除。它有效,结果是:
{
"_id" : ObjectId("50b59cd75bed76f46522c34e"),
"student_id" : 0,
"class_id" : 2,
"scores" : [
{
"type" : "quiz",
"score" : 21.24542588206755
},
{
"type" : "homework",
"score" : 68.19567810587429
},
{
"type" : "homework",
"score" : 67.95019716560351
},
{
"type" : "homework",
"score" : 18.81037253352722
}
]
}
但如果我反转条件,我希望结果中只保留考试:
if: { $eq: [ "$type" , "exam" ] },
then: "$$DESCEND",
else: "$$PRUNE"
然而结果是空的。
我不明白为什么不包括“考试”类型的子文档。
【问题讨论】:
-
又是一个mongodb大学作业。
-
@user3100115 家庭作业问题不一定是坏问题,只要它们以寻求洞察力的方式编写,而不仅仅是获得足够高分的完成解决方案。
-
@Philipp 但是,我从第一手经验中知道,学生的每一步都以相当冗长的方式进行教学。详细的,我可能会补充,文档也不错。从我的角度来看,每个课程的目的是为学生提供足够的信息,以便文档或多或少地成为提醒。在这种情况下,与现有查询一起出现的问题似乎有点... ...对我来说是任意的。
-
不,这不是大学作业。我在 2 年前就已经通过了考试,此时还没有编辑。我不清楚文档。我认为这是提出问题的正确地方。
标签: mongodb aggregation-framework