MongoDB——聚合管道之$project操作

Posted 小志的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB——聚合管道之$project操作相关的知识,希望对你有一定的参考价值。

目录

一、数据准备

  • 准备数据集,执行脚本

    var tags = ["nosql","mongodb","document","developer","popular"];
    var types = ["technology","sociality","travel","novel","literature"];
    var books=[];
    for(var i=0;i<50;i++)
    	var typeIdx = Math.floor(Math.random()*types.length);
    	var tagIdx = Math.floor(Math.random()*tags.length);
    	var tagIdx2 = Math.floor(Math.random()*tags.length);
    	var favCount = Math.floor(Math.random()*100);
    	var username = "xx00"+Math.floor(Math.random()*10);
    	var age = 20 + Math.floor(Math.random()*15);
    	var book = 
    		title: "book-"+i, 
    		type: types[typeIdx],
    		tag: [tags[tagIdx],tags[tagIdx2]],
    		favCount: favCount, 
    		author: name:username,age:age
    	;
    	books.push(book)
    
    db.books1.insertMany(books);
    

二、聚合管道之$project操作示例

2.1、查询集合中的数据

  • 查询books1集合中的数据

    > db.books1.find()
    

  • 查询books1集合中的数据,格式化显示数据

    > db.books1.find().pretty()
    

2.2、$project 可以表示投影操作, 将原始字段投影成指定名称

  • 将books1集合中的 title 投影成 name

    db.books1.aggregate([$project:name:"$title"])
    

2.3、$project 可以灵活控制输出文档的格式,也可以剔除不需要的字段

  • title字段替换name,并且只显示type和author字段。(0表示不显示此字段,1表示显示此字段

    //_id:0表示不显示id字段;type:1表示显示type字段;author:1表示显示author字段
    db.books1.aggregate([$project:name:"$title",_id:0,type:1,author:1])
    

2.4、$project 可以从嵌套文档中排除字段

  • 只显示author嵌套文档中的name字段

    db.books1.aggregate([ $project:name:"$title",_id:0,type:1,"author.name":1 ])
    

以上是关于MongoDB——聚合管道之$project操作的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB的聚合操作

MongoDB——聚合管道之$limit&$skip&$sort操作

MongoDB——聚合管道之$unwind操作

MongoDB——聚合管道之$match和$count操作

MongoDB——聚合管道之$group操作

MongoDB——聚合管道之$group操作