我有一个使用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中的集合中排除一个/(两个)特定字段。
答案 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 });
});