mongodb的聚合函数的$redact方法运用。
译自:http://docs.mongoing.com/manual-zh/reference/operator/aggregation/redact.html
http://www.myexception.cn/go/2046467.html
$redact
根据字段所处的document结构的级别,对文档进行“修剪”,它通常和“判断语句if-else”结合使用即“$cond”。$redact可选值有3个:
1)$$DESCEND:包含当前document级别的所有fields。当前级别字段的内嵌文档将会被继续检测。
2)$$PRUNE:不包含当前文档或者内嵌文档级别的所有字段,不会继续检测此级别的其他字段,即使这些字段的内嵌文档持有相同的访问级别。
3)$$KEEP:包含当前文档或内嵌文档级别的所有字段,不再继续检测此级别的其他字段,即使这些字段的内嵌文档中持有不同的访问级别。
{_id: 1,tags: [ "G", "STLW" ],year: 2014,subsections: [{subtitle: "Section 1",tags: [ "SI", "G" ],},{subtitle: "Section 2",tags: [ "STLW" ],},{subtitle: "Section 3",tags: [ "TK" ],content: {tags: [ "HCS" ]}}]
}
那么对于语句:
$redact: {$cond: {if: { $gt: [ { $size: { $setIntersection: [ "$tags", ["STLW","G"] ] } }, 0 ] },then: "$$DESCEND",else: "$$PRUNE"}}
$setIntersection表示将2个数组的交集中不同元素的个数,$cond就是一个三元表达式,此例中表示“如果交集元素的个数大于0,则值为为$$DESCEND,否则为$$PRUNE”。对于此文档(ROOT级别)的最高级别的tags值为["G","STLW"],此级别值为$$DESCEND,即此tage同级别的其他字段将会包含;那么继续检测“subsections.tags”级别的所有文档(是个数组,则逐个检测),基本思路类似,如果此级别返回$$DECEND那么继续检测“subsections.tags.content.tags”是否符合访问规则,如果返回$$PRUNE,那么此tags所在的内嵌文档的所有字段将被排除,即使与此tags同级别的contents.tags符合访问规则。最终输出结果:
{"_id" : 1,"tags" : [ "G", "STLW" ],"year" : 2014,"subsections" : [{"subtitle" : "Section 1","tags" : [ "SI", "G" ],"content" : "Section 1"},{"subtitle" : "Section 2: Analysis","tags" : [ "STLW" ],"content" : "Section 2"}]
}
再如如下例子:
db.accounts.find({})的查询结果如下:
{
"_id" : 1.0,
"level" : 1.0,
"acct_id" : "xyz123",
"cc" : {
"level" : 5.0,
"type" : "yy",
"num" : 0.0,
"exp_date" : ISODate("2015-11-01T00:00:00.000+0000"),
"billing_addr" : {
"level" : 5.0,
"addr1" : "123 ABC Street",
"city" : "Some City"
},
"shipping_addr" : [
{
"level" : 3.0,
"addr1" : "987 XYZ Ave",
"city" : "Some City"
},
{
"level" : 3.0,
"addr1" : "PO Box 0123",
"city" : "Some City"
}
]
},
"status" : "A"
}
db.accounts.aggregate(
[
{ $match: { status: "A" } },
{
$redact: {
$cond: {
if: { $eq: [ "$level", 5 ] },
then: "$$PRUNE",
else: "$$DESCEND"
}
}
}
]
);
的查询结果如下:
{
"_id" : 1.0,
"level" : 1.0,
"acct_id" : "xyz123",
"status" : "A"
}
mongodb的聚合函数的$redact方法运用。相关推荐
- 聚合函数的python方法
聚合函数的python方法 最大值max: num=[1,2,3,4] def L_max(numb):one=numb[0]for i in numb:if i > one:one = ire ...
- mysql 聚合函数嵌套_Mysql聚合函数嵌套如何使用 Mysql聚合函数嵌套使用方法
Mysql聚合函数嵌套如何使用?本篇文章小编给大家分享一下Mysql聚合函数嵌套使用方法,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 目的:Mysql 聚合函数嵌套使用 ...
- MongoDB 之聚合函数查询统计
第一关:第1关:聚合管道操作符将文档定制格式输出(一) (命令行) mongo use test1 db.educoder.insert([{ _id:1, course:'Python表达式问题求解 ...
- MongoDB的聚合函数 Aggregate
Aggregate的使用,有利于我们对MongoDB中的集合进行进一步的拆分. 示例: db.collection.aggregate({$match:{x:1},{limit:10},{$group ...
- oracle 自定义 聚合函数
Oracle自定义聚合函数实现字符串连接的聚合 create or replace type string_sum_obj as object ( --聚合函数的实质就是一个对象 sum ...
- 聚合函数处理excel数据------(一)
导入模块 import numpy as np import pandas as pd 一.transform 聚合函数 在pandas 或者numpy 中没有现成的函数可以使用,可以通过transf ...
- oracle高级函数去重,傅老师课堂:Oracle高级应用之去重聚合函数
开篇一笑:高中的时候,自行车被偷,早上顺路搭同学的自行车.我坐在后座看到前面一大妈跑步,很猥琐的对同学说:"你看前面那个肥婆跑得屁股都甩圆了!"这货沉默了一下.当我们和大妈擦身而过 ...
- SQL Server 聚合函数
在数据库中有大量的数据,如果统计起来会较为麻烦,比如统计某数据的平均值或者总数值,但是在SQL Server中有聚合函数可以使用,聚合函数会对一个组进行运算然后返回计算的结果,通常和GROUP BY子 ...
- mongodb 聚合函数求平均值及时差处理
最近因为公司需要做一些小时平均和每日平均的统计,于是去找了下mongodb的系统函数.通过avg和聚合查询实现了结果,但是发现统计的时候mongodb函数$dateToString: { format ...
最新文章
- 模拟spring - 简单实现spring IOC
- Insert Interval
- boost::gil模块实现dynamic image的测试程序
- mybatis----#与$区别
- extends 抽象方法_关于abstract抽象类的理解
- 【视频】利用IDEA 创建 spring mvc项目
- ApiPost报TypeError: Cannot read property ‘oauth‘ of undefined的解决方案
- 架构师的职责都有哪些?
- Unity5.x 依赖关系打包 AssetBundle 研究
- 圣诞节的整理前两周的内容4
- axios 上传文件 封装_axios 封装【满足常规数据上传及file上传】
- 大事件!35的程序员竟然失去了面试资格,这是为什么?
- HDU ACM 2647 Reward (topology----拓扑排序)
- 关于Eclipse配置Tomcat8的问题
- 2D游戏案例:(平台下落类)Solo Fall
- vb.net 简单取摄像头图片_简单的BP网络识别液晶字符
- 信息化、数字化与数智化傻傻分不清
- 力扣第四十六题(全排列)详解
- 一文读懂IaaS、PaaS、SaaS的含义及区别
- 快速入门Spring之SpringIOC
热门文章
- 可以找到单词起源的查询网站
- Linux基础防火墙、KVM、zabbix具体配置
- 复旦大学科学计算机系王欢,复旦大学计算机科学技术学院举行2019级研究生新生入学教育大会...
- 1598 - 文具店的折扣
- PJzhang:kali linux安装金山wps、永中office、sougoupinyin、ibuspiyin
- 【NOIP 2017 提高组 DAY1 T1】小凯的疑惑
- netscape.javascript.JSException: Unknown source:Invalid argument.
- 飞针测试和专用治具测试流程详解
- django基础到高手知识笔记总结,50页笔记,共10大模块(第一期).md
- ORA-02287: 此处不允许序号