gpt4 book ai didi

mongodb - mongodb中的编辑对我来说似乎晦涩难懂

转载 作者:IT老高 更新时间:2023-10-28 13:26:08 26 4
gpt4 key购买 nike

我现在正在与编辑作斗争,但我不确定是否理解它。

我刚刚阅读了文档并尝试在集合成绩上使用 redact(它来自 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"

然而结果是空的。

我不明白为什么不包括“考试”类型的子文档。

最佳答案

$redact 阶段从根文档及其字段开始,只有当该文档满足 $$DESCEND 的条件时,它才会检查包含的子文档在那个文件中。这意味着 $redact 对您的文档所做的第一件事就是检查以下内容:

{
"_id" : ObjectId("50b59cd75bed76f46522c34e"),
"student_id" : 0,
"class_id" : 2,
"scores" : [] // Some array. I will look at this later.
}

这里甚至找不到 type 字段,所以 $eq: [ "$type", "exam"] 为假。当条件为假时,你告诉 $redact 做什么? else: "$$PRUNE",因此在检查子文档之前修剪整个文档。

作为一种解决方法,测试 $type"exam" 还是不存在。你没有明确要求一个可行的解决方案,所以我将把它作为练习留给你来弄清楚如何做到这一点。

关于mongodb - mongodb中的编辑对我来说似乎晦涩难懂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32653442/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com