简介

Mongoose是在NodeJS开发中对mongodb进行便捷操作的对象模型工具。

当我们获取数据的时候,通常需要对数据进行筛选过滤以避免泄漏重要信息,下面我将简单介绍如何使用mongoose进行数据筛选过滤(filter)。

直接数据过滤

直接数据意思就是我们拿到的就是存放在mongodb数据库中的数据,没有进行外健populate过的数据。 代码如下

Admin.findById(id)
    .exec(function (err, result){
        ...
    })

通过id查找admin,在这里admin的所有字段信息将会全部被读取。

那么,如何过滤其它字段,只显示name以及phone字段呢,代码如下:

Admin.findById(id, 'name phone')
    .exec(function (err, result){
        ...
    })

在这里,通过查询函数findById的第二个参数保留name以及phone字段,其它字段将被过滤,这个方法同样适用于findfindOne等mongoose查询语句。

间接数据过滤

间接数据意思是我们所需要过滤的数据是populate而来的外键绑定数据。 代码如下:

Admin.findById(id)
    .populate('shop')
    .exec(function (err, result){
        ...
    })

这段代码是通过id查找admin并且admin所绑定的外健shop的所有数据也会一并查询出来。

那么如何过滤shop数据只显示name以及logo字段呢,代码如下:

Admin.findById(id)
    .populate({
        path: 'shop',
        select: 'name logo'
    }).exec(function (err, result){
        ...
    })

在这里使用populate对象形式的select保留所需要的字段名称。

混合数据

意思是所执行查询语句中既有直接数据又有间接数据,过滤代码如下:

Admin.findById(id, 'name phone shop')
    .populate({
        path: 'shop',
        select: 'name logo'
    })
    .exec(function (err, result){
        ...
    })

在这里,查询出admin数据仅包含namephone以及shop字段,其中shop字段仅包含namelogo字段,既过滤了直接数据又过滤了间接数据。

总结

happy joining !