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

时间:2013-01-28 09:40:50

标签: javascript mongodb mongoose 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);
        }
    });

但这会返回错误

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中的集合中排除一个/(两个)特定字段。

6 个答案:

答案 0 :(得分:95)

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

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

Query.select('-Image');

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

答案 1 :(得分:23)

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

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

以下是the official documentation的示例:

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

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

答案 2 :(得分:15)

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

此代码在我的项目中有效。谢谢!!祝你有愉快的一天。

答案 3 :(得分:1)

我在异步等待中使用

async (req, res) => {
      try { 
        await User.findById(req.user,'name email',(err, user) => {
          if(err || !user){
            return res.status(404)
          } else {
            return res.status(200).json({
              user,
            });
          }
        });
      } catch (error) {
        console.log(error);
      }

答案 4 :(得分:0)

您可以这样做

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

答案 5 :(得分:0)

在猫鼬的更新版本中,您可以按以下方式使用它来获取选定的字段。

user.findById({_id: req.body.id}, 'username phno address').then(response => {
  res.status(200).json({
    result: true,
    details: response
  });
}).catch(err => {
  res.status(500).json({ result: false });
});