ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

mongo aggregate的使用,以及常用api的记录

2019-07-31 20:02:47  阅读:325  来源: 互联网

标签:mongo project 管道 api 文档 aggregate 方法 表达式


mongo的聚合查询引用了管道的概念,什么是管道呢,先看一下菜鸟教程上的描述

MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。
表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。

其实就是将每一次表达式处理后的结果缓存起来,作为下一个表达式的文档结构,直到最后一个表达式处理后输出。可见它是单向的、有序的

具体的使用方法可以看菜鸟教程(懒死)

这里记录曾经使用过的部分API(防痴呆):(注:黄色标记的表示不属于管道方法)
api 介绍 实例
$addFields 添加一个新字段 [ { $addFields: {newField: 'hello mongo'} } ]|
$project 过滤字段 [ { $project: {field1: 1, field2: 0} } ]|
$subtract 两数相减,可用于判断大小 [{ $addFields: { result: { $subtract: ['$totalNumber', '$subNumber'] } } } ]|
$filter 从数组中筛选出符合条件的元素 看下文
注意事项:

1、$可以表示管道的方法名,也可以表示管道中的字段

2、$sort方法中,1表示降序,-1表示升序,这和sort方法的排序相反(我也不知道为什么,有错请指出)

3、$filter不是一个管道命令,无法单独使用,它可以配合$project方法使用,如下代码:

// 这个表达式的意思是,从arr字段(数组)筛选出值等于1的元素,塞入newArr方法中
db.collection.aggregate([
	{
		$project: {	// 管道方法
			newArr: {	// 新字段名称,也可以和原来的字段arr同名
				$filter: {	// mongo方法,用户筛选出数组符合条件的元素
					input: '$arr',  // 需要过滤的数组字段
					as: 'item', 	// 元素的变量名
					cond: {$eq: ['$$item': 1]  // $$item是元素的变量名,$eq是mongo方法,判断元素是否相等
				}
			}
		}
	}
])

标签:mongo,project,管道,api,文档,aggregate,方法,表达式
来源: https://blog.csdn.net/weixin_41855143/article/details/97814531

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有