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

dan*_*any 50 javascript mongoose mongodb mongodb-query

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

    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);
        }
    });
Run Code Online (Sandbox Code Playgroud)

但这会返回错误

Express
500 TypeError: Object #<Query> has no method 'exclude'.........
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*yHK 105

使用query.select在当前(3.X)字段选择猫鼬的基础之上.

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

Query.select('-Image');
Run Code Online (Sandbox Code Playgroud)

快速旁白:在JavaScript中,应该为构造函数保留以大写字母开头的变量.所以考虑重新命名Queryquery您的代码.

  • 您还可以通过执行以下操作来排除子文档字段:`-Image.width` (12认同)

Phi*_*ipp 30

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

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

以下是官方文档中的示例:

db.inventory.find( { type: 'food' }, { type:0 } )
Run Code Online (Sandbox Code Playgroud)

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

  • 他在询问猫鼬,你正在使用本机驱动程序. (4认同)

小智 17

Model.findOne({ _id: Your Id}, { password: 0, name: 0 }, function(err, user){
  // put your code
});
Run Code Online (Sandbox Code Playgroud)

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


Adi*_*tya 7

你可以这样做

const products = await Product.find().select(['-image'])
Run Code Online (Sandbox Code Playgroud)