Mongodb $redact 用法

概括

这个方法一般与 $cond 一起使用,如果匹配成功,则执行 $$DESCEND$$PRUNE$$KEEP 指令。

下面的指令意思就是:递级匹配,匹配的话,当前级别的所有字段都会返回,然后匹配下一级,直到某一级的 tags 这个 array 里木有 "G" 的时候,停止匹配,且该级别的所有字段都不会返回。

如果有更好的理解方式,可以在文章下面留言。

db.test.aggregate([ 
  {$match: {year:2014}}, 
  {$redact: 
    {$cond: 
      {
        if: {$gt: [{$size: {$setIntersection: ["$tags", ["G"]]}}, 0]}, 
        then: "$$DESCEND", 
        else: "$$PRUNE" 
      }
    }
  } 
]).pretty()

DESCEND、PRUNE、KEEP 这三者有什么区别呢?

{
    "_id" : 1,
    "title" : "123 Department Report",
    "tags" : [
        "G",
        "STLW"
    ],
    "year" : 2014,
    "subsections" : [
        {
            "subtitle" : "Section 1: Overview",
            "tags" : [
                "SI",
                "G"
            ],
            "content" : "Section 1: This is the content of section 1."
        },
        {
            "subtitle" : "Section 2: Analysis",
            "tags" : [
                "STLW"
            ],
            "content" : "Section 2: This is the content of section 2."
        },
        {
            "subtitle" : "Section 3: Budgeting",
            "tags" : [
                "TK"
            ],
            "content" : {
                "text" : "Section 3: This is the content of section3.",
                "tags" : [
                    "HCS"
                ]
            }
        }
    ]
}
  • $$DESCEND
    递增匹配,匹配就返回当前级别的所有字段,并继续匹配下一级别。
  • $$PRUNE
    当前级别如果不匹配的话,这个级别的所有字段都不会返回,且不会继续匹配下一级别。
  • $$KEEP
    当前级别如果匹配的话,这个级别的所有字段都会返回,且不会继续匹配下一级别。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 全书的重点在四五六章:如何建表、如何建索引、如何查询。第一章讲解了一些基本概念:锁与事物隔离 重中之重:4.1数据...
    AbrahamW阅读 1,015评论 0 0
  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,237评论 2 33
  • 今天看到一位朋友写的mysql笔记总结,觉得写的很详细很用心,这里转载一下,供大家参考下,也希望大家能关注他原文地...
    信仰与初衷阅读 4,760评论 0 30
  • 一、MySQL架构与历史 A.并发控制 1.共享锁(shared lock,读锁):共享的,相互不阻塞的。 2.排...
    阿休阅读 4,696评论 0 37
  • 一、MySQL架构与历史 A.并发控制 1.共享锁(shared lock,读锁):共享的,相互不阻塞的 2.排他...
    ZyBlog阅读 19,875评论 3 177