如何以编程方式强制 mongoose 查询并返回 mongodb 集合中的某个字段?
Posted
技术标签:
【中文标题】如何以编程方式强制 mongoose 查询并返回 mongodb 集合中的某个字段?【英文标题】:How to programmatically force mongoose to query and return a certain field in a mongodb collection? 【发布时间】:2017-04-14 10:45:34 【问题描述】:我有一个密码和盐存储在 mongodb 中,我可以查询除盐以外的所有其他字段。
这是架构:
var userSchema = new Schema(
firstname : type: String, trim: true,
lastname : type: String, trim: true,
email : type: String, required: true, unique: true, trim:true,
password : type: String, required: true,
salt : type: String, required: true, trim: true, unique: true,
addedOn : type: String, required: false
);
...
还有这里的文档请求:
User.findOne(
email: req.body.email
).exec(function(err, obj)
if (err)
console.log("MongoDB Error: " + err);
return res.status(500); // or callback
else if (obj)
console.log(obj.firstname); //This works
console.log(obj.salt); // And this doesn't
);
但是当我从终端运行 db.users.find() 时,这个文档存在并且有盐。
编辑:
我在这里找到了我的问题的解决方案How to protect the password field in Mongoose/MongoDB so it won't return in a query when I populate collections?
【问题讨论】:
【参考方案1】:使用这个你可以强制 mongoose 从 mongodb 集合中查询并返回某个字段:
User.findOne(
email: req.body.email
,
firstname: 1, lastname: 1 , email: 1, password: 1, addedOn: 1).exec(function(err, obj)
if (err)
console.log("MongoDB Error: " + err);
return res.status(500); // or callback
else if (obj)
console.log(obj);
);
【讨论】:
【参考方案2】:我喜欢 Mital 的回答,它检索字段但由于某种原因返回的值不可用。
这相当有效。
User.findOne(
email: req.body.email
).select('+salt').exec(function(err, obj)
...
【讨论】:
以上是关于如何以编程方式强制 mongoose 查询并返回 mongodb 集合中的某个字段?的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式将IAsyncOperation强制为错误状态?
我如何以编程方式将IAsyncOperation强制为错误状态?