75

我有一个带有 Mongoose ODM(Mongoose 3.3.1)的 NodeJS 应用程序。我想从我的集合中检索除 1 之外的所有字段。例如:我有一个包含 6 个字段的集合产品,我想选择除字段 "Image" 之外的所有字段。我使用了“排除”方法,但出错了。这是我的代码。

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

4

6 回答 6

145

用于query.select当前 (3.x) Mongoose 构建中的字段选择。

在要排除的字段名称前加上-; 所以在你的情况下:

Query.select('-Image');

顺便说一句:在 JavaScript 中,应为构造函数保留以大写字母开头的变量。因此,请考虑在您的代码中Query重命名。query

于 2013-01-28T13:50:31.817 回答
44

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

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

这是官方文档中的示例:

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

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

于 2013-01-28T09:48:34.847 回答
32
Model.findOne({ _id: Your Id}, { password: 0, name: 0 }, function(err, user){
  // put your code
});

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

于 2015-11-03T14:14:42.903 回答
14

你可以这样做

const products = await Product.find().select(['-image'])
于 2019-03-23T13:05:08.930 回答
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);
      }
于 2020-05-23T00:21:12.580 回答
0

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

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 });
});
于 2020-04-01T11:30:03.267 回答