首页 文章

如何从Mongoose中的集合中排除一个特定字段?

提问于
浏览
46

我有一个带Mongoose ODM的NodeJS应用程序( Mongoose 3.3.1 ) . 我想从我的集合中检索除1之外的所有字段 . 例如:我有一个集合Product有6个字段,我想要选择除字段"Image"之外的所有字段 . 我使用了“ exclude ”方法,但得到了错误..这是我的代码 .

var Query = models.Product.find();
    Query.exclude('title Image');

    if (req.params.id) {
        Query.where('_id', req.params.id);
    }


    Query.exec(function (err, product) {
        if (!err) {
            return res.send({ 'statusCode': 200, 'statusText': 'OK', 'data': product });
        } else {
            return res.send(500);
        }
    });

但这会返回 error

Express
500 TypeError: Object #<Query> has no method 'exclude'.........

我也试过了, var Query = models.Product.find().exclude('title','Image');var Query = models.Product.find({}).exclude('title','Image'); 但是得到了同样的错误 . 如何从Mongoose中的集合中排除一个/(两个)特定字段 .

4 回答

  • 91

    在当前(3.x)Mongoose构建中使用query.select进行字段选择 .

    使用 - 作为要排除的字段名称的前缀;所以在你的情况下:

    Query.select('-Image');
    

    快速旁白:在JavaScript中,应该为构造函数保留以大写字母开头的变量 . 因此,请考虑在代码中将 Query 重命名为 query .

  • 21

    我不知道你在哪里读到.exclude函数,因为我在任何文档中都找不到它 .

    但是您可以使用find方法的第二个参数排除字段 .

    以下是the official documentation的示例:

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

    此操作返回type字段的值为food的所有文档,但不包括输出中的type字段 .

  • 15
    Model.findOne({ _id: Your Id}, { password: 0, name: 0 }, function(err, user){
      // put your code
    });
    

    这段代码在我的项目中有效 . 谢谢!!祝你今天愉快 .

  • 0

    你可以做到这一点

    const products = await Product.find().select(['-image'])
    

相关问题