MongoDB--$project和$push的区别

Posted 小陆同学

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB--$project和$push的区别相关的知识,希望对你有一定的参考价值。

正文开始前,首先需要表名几条定义:

聚合(aggregate)是基于数据处理的聚合管道,每个文档通过一个由多个阶段(stage)组成的管道,可以对每个阶段的管道进行分组、过滤等功能,然后经过一系列的处理,输出相应的结果

语法:db.集合名称.aggregate({管道:{表达式}})

$project是常用的管道命令之一:修改输⼊⽂档的结构,如重命名、增加、删除字段、创建计算结果

$push是常用的表达式之一:在结果⽂档中插⼊值到⼀个数组中,数据透视

 

接下来用这个集合作为事例来分析二者的区别: 


> db.car.find()
{ "_id" : ObjectId("5c2ec81a1590d9e9886e30f8"), "carname" : "大众", "color" : "red", "price" : 120 }
{ "_id" : ObjectId("5c2ec81a1590d9e9886e30f9"), "carname" : "奔弛", "color" : "bule", "price" : 400000 }
{ "_id" : ObjectId("5c2ec81a1590d9e9886e30fa"), "carname" : "宝马", "color" : "green", "price" : 300000 }
{ "_id" : ObjectId("5c2ec81a1590d9e9886e30fb"), "carname" : "奔弛", "color" : "red", "price" : 600000 }
{ "_id" : ObjectId("5c2ec81a1590d9e9886e30fc"), "carname" : "大众", "color" : "yellow", "price" : 100 }
{ "_id" : ObjectId("5c2ec81a1590d9e9886e30fd"), "carname" : "大众", "color" : "yellow", "price" : 120 }

 

$project:

db.car.aggregate(
{$project:{_id:0,carname:1}}
)

//_id字段默认为1是显示状态,不需显示用0表示,   其他字段默认为不显示

显示效果为:

 

 

$push:

db.car.aggregate(
{$group:{_id:null,name:{$push:\'$carname\'}}}
)

//_id:null 表示不指定分组的字段

 显示效果为:

 

以上是关于MongoDB--$project和$push的区别的主要内容,如果未能解决你的问题,请参考以下文章

mongodb怎么查询数组中的值

Mongodb 用 $cond 和 $each 聚合 $push

查询 $match 和 $project 重嵌套数据(MongoDB/聚合)

mongodb中$push和$pull的使用,向内嵌的数组中删除和添加元素

使用push和group在mongodb中聚合

为啥使用 MongoDB 的 $push 将新对象添加到数组时添加了带有 ObjectID 的 _id?