mongodb 中的 Redact 对我来说似乎很晦涩

2024-06-02

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

我刚刚阅读了文档并尝试在集合成绩上使用 redact (它来自 mongodb 在线培训)

“grades”集合中的文档如下所示:

{
    "_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" 

然而结果是空的。

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


The $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"或不存在。您没有明确要求提供可行的解决方案,因此我将其作为练习留给您来弄清楚如何执行此操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mongodb 中的 Redact 对我来说似乎很晦涩 的相关文章

随机推荐

  • Dojo 控制台错误对象为空

    突然间 Dojo 来自 Google CDN 的 1 8 3 抛出空错误 这使得调试变得异常困难 例如 如果我忘记require在使用它之前 我会得到通常的依赖 gt dojo parser parse error ReferenceErr
  • 如何使用 Perl 和正则表达式将 SQL 文档转换为 ColdFusion 脚本?

    我需要将 SQL 语句文档转换为 ColdFusion 文档 我对正则表达式只有一点经验 而且我是 Perl 超级新手 我昨天刚刚自学了它的基础知识 所以我可以完成这项任务 我正在尝试用 Perl 编写的脚本匹配和替换模式 该脚本保存为 B
  • 如何使用 Microsoft Kinect for Windows SDK 版本 1.7 C# 检测张开/闭合的手

    我最近开始使用 Microsoft Kinect for Windows SDK 来使用 Kinect 设备来编程一些东西 我正在竭尽全力寻找一种方法来检测某只手是闭合还是打开 我看到了 Kinect for Windows Toolkit
  • 为什么我的 WPF 复选框绑定不起作用?

    我正在使用 MVVM VS 2008 和 NET 3 5 SP1 我有一个项目列表 每个项目都公开一个 IsSelected 属性 我添加了一个复选框来管理列表中所有项目的选择 取消选择 更新每个项目的 IsSelected 属性 一切正常
  • 我收到 java.lang.NoClassDefFoundError

    这与我询问的程序相同here https stackoverflow com questions 5734214 what is wrong with my androidmanifest xml 我解决了这个问题 但现在当我启动它时 它崩
  • ServiceStack支持反向路由吗?

    遵循 REST 建议 API 是可发现的并且应该相互链接 ServiceStack 是否支持任何类型的反向路由 我正在寻找类似的东西Url RouteLink在 ASP MVC 中 这里陈述了一些混合概念 在尝试遵守 REST 的过程中 您
  • C#中如何从字符串中提取十进制数

    string sentence X10 cats Y20 dogs 40 fish and 1 programmer string digits Regex Split sentence D 对于此代码 我在数字数组中获取这些值 10 20
  • 与 FOREIGN KEY 约束冲突

    我有两张桌子 学术界 CREATE TABLE dbo R ACADEMIE ID ACADEMIE dbo IDENTIFIANT NOT NULL LC ACADEMIE CODE dbo LIBELLE COURT NOT NULL
  • INNER JOIN 可用作 SELECT,但不能用作 DELETE [重复]

    这个问题在这里已经有答案了 为什么这个有语法错误 DELETE FROM print mailing request pmr INNER JOIN person p ON p id pmr person AND p email LIKE T
  • AS3 内存泄漏示例

    有人可以发布一个 as3 代码的示例 特别是包括事件侦听器 这将是一个可能泄漏内存的简单示例 也希望您能发布所显示问题的解决方案吗 问题是 AS3 事件监听器中内存泄漏的一个简单示例是什么 如何解决它 public class MySpri
  • 在 Eclipse Juno 上安装 Marketplace 插件

    我下载了Eclipse Juno 4 2 经典捆绑包 http eclipse org downloads 然后看到了Help gt Marketplace 不可用 AFAIK 这是由mpc 插件 在他们的网站上 http eclipse
  • PHP 自定义会话处理程序问题 (PHP 7.1)

    我刚刚在计算机上从 PHP 7 0 迁移到 PHP 7 1 当前版本的 WAMP 的全新 全新安装 它似乎破坏了自定义会话处理程序中的某些内容 该处理程序应该将会话保存到数据库而不是使用文件系统 自定义处理程序类是 class db ses
  • 如何指定 AsRef 的生命周期?

    我正在尝试编写一个函数来连接两个可迭代对象 其项目可以转换为OsStr引用 并且在尝试指定引用的生命周期时遇到了巨大的困难 use std convert AsRef use std ffi OsStr use std marker Pha
  • 使用 matplotlib 同时绘制两个直方图时,不透明度会产生误导

    假设我有两个直方图 我使用 hist 参数设置不透明度 alpha 0 5 我绘制了两个直方图 但我得到了三种颜色 我理解从不透明的角度来看这是有道理的 但 向某人展示具有三种颜色的两个事物的图表会让人非常困惑 我可以以某种方式将每个垃圾箱
  • 为什么 Sleep() 会使后续代码减慢 40 毫秒?

    我最初是在 coderanch com 上询问这个问题的 所以如果您尝试在那里帮助我 谢谢 并且不必重复这个努力 不过 coderanch com 主要是一个 Java 社区 而且 经过一些研究 这似乎确实是一个 Windows 问题 因此
  • 如何为活动添加背景图片?

    使用主题或 ImageView use the android backgroundxml 中的属性 如果您想将其应用到整个活动 最简单的方法是将其放在布局的根目录中 因此 如果您有一个relativelayout作为您的xml的开头 请将
  • 执行命令后如何保持 sbt 运行(作为守护进程)

    我想从 sbt 启动 scalatra 服务器 我怎么做 以下命令启动 scalatra sbt container start 但它立即退出 info starting server success Total time 2 s comp
  • vim 的 @@ 变量是什么?

    我知道通过输入 我执行最后一个 命令 但谁能解释一下什么 是在下面的代码中 在 vim 帮助文件中找到 function CountSpaces type let sel save selection let reg save if a 0
  • SQL Server 中的派生表

    我有这两个疑问 我不知道如何将它们组合在一起来制作派生表 我假设使用第二个查询作为主查询 并在主查询的 FROM 子句中使用第一个查询 SELECT EmailAddress Orders OrderID SUM ItemPrice Qua
  • mongodb 中的 Redact 对我来说似乎很晦涩

    我现在正在与 redact 作斗争 我不确定是否理解它 我刚刚阅读了文档并尝试在集合成绩上使用 redact 它来自 mongodb 在线培训 grades 集合中的文档如下所示 id ObjectId 50b59cd75bed76f465