mongodb中查询返回指定字段

在写vue项目调用接口获取数据的时候,比如新闻列表页我只需要显示新闻标题和发表时间,点击每条新闻进入详情页的时候才会需要摘要、新闻内容等关于此条新闻的所有字段。 
但其实我所有关于新闻的数据在同一个数据集合里,也就是只有一个集合

我不希望获取新闻列表的时候就把每条新闻的所有数据都显示 
我也不希望是建两个集合分别放列表数据和详情数据


//只输出id和title字段,第一个参数为查询条件,空代表查询所有
db.news.find( {}, { id: 1, title: 1 } ) //如果需要输出的字段比较多,不想要某个字段,可以用排除字段的方法 //不输出内容字段,其它字段都输出 db.news.find( {}, {content: 0 } )

 

想了解详细内容可参照上方原文。我这里只是对自己项目需求的简单纪录。方法亲测有效。

 

MongoDB查询操作限制返回字段的方法

 


这篇文章主要介绍了MongoDB查询操作限制返回字段的方法,需要的朋友可以参考下



 



映射(projection )声明用来限制所有查询匹配文档的返回字段。projection以文档的形式列举结果集中要包含或者排除的字段。可以指定要包含的字段(例如: {field:1})或者指定要排除的字段(例如:{field:0})。默认_id是包含在结果集合中的,要从结果集中排除_id字段,需要在 projection中指定排除_id字段({_id:0})。除了_id字段,不能在一个projection中联合使用包含和排除语意。

返回匹配文档的所有字段:

如果没有指定projection,find()方法返回所有匹配文档的所有字段。

 代码如下:


db.inventory.find( { type:                  'food'                  } )


这个例子将返回inventory集合中type字段的值为"food"的所有文档,返回的文档包含全部字段。



返回指定字段和_id字段:


一个projection可以明确地指定多个字段。下面的操作中,find()方法返回匹配的所有文档。在结果集中,只有item和qty字段,默认_id字段也是返回的。


代码如下:

db.inventory.find( { type:                  'food'                  }, { item:                  1                 , qty:                  1                  } )



  


仅返回指定字段:


可以通过在projection中指定排除_id字段将其从结果中去掉,如下例子所示:

db.inventory.find( { type:                  'food'                  }, { item:                  1                 , qty:                  1                 , _id:                 0                  } )



返回除排除掉以外的字段:


可以使用一个projection排除一个或者一组字段,如下:

 代码如下:

db.inventory.find( { type:                  'food'                  }, { type:                 0                  } )

这个操作返回所有type字段值为food的文档,在结果中type字段不返回。


数组字段的projection:


 

elemMatch和elemMatch和slice运算符是对数组进行projection的唯一途径。