如何使用mongoose findOne
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用mongoose findOne相关的知识,希望对你有一定的参考价值。
我有以下架构(道歉,它是在coffeescript)
Schema = mongoose.Schema
AuthS = new Schema
auth: {type: String, unique: true}
nick: String
time: Date
Auth = mongoose.model 'Auth', AuthS
我只想恢复一条肯定在我的数据库中的记录:
Auth.findOne({nick: 'noname'}, function(obj) { console.log(obj); });
不幸的是,这总是记录null
。 mongo shell中的db.auths.findOne({nick: 'noname'})
总是返回一个值。到底是怎么回事?
发现问题,需要使用function(err,obj)
代替:
Auth.findOne({nick: 'noname'}, function(err,obj) { console.log(obj); });
Mongoose基本上包装mongodb的api给你一个伪关系db api所以查询不会像mongodb查询一样。 Mongoose findOne查询返回查询对象,而不是文档。您可以根据解决方案的建议使用回调,或者从v4 + findOne返回一个回调,这样您就可以使用.then或await / async来检索文档。
// thenables
Auth.findOne({nick: 'noname'}).then(err, result) {console.log(result)};
Auth.findOne({nick: 'noname'}).then(function (doc) {console.log(doc)});
// To use a full fledge promise you will need to use .exec()
var auth = Auth.findOne({nick: 'noname'}).exec();
auth.then(function (doc) {console.log(doc)});
// async/await
async function auth() {
const doc = await Auth.findOne({nick: 'noname'}).exec();
return doc;
}
auth();
如果您想使用第三方承诺库,请参阅docs。
您可能需要考虑将console.log
与内置的“arguments”对象一起使用:
console.log(arguments); // would have shown you [0] null, [1] yourResult
无论你有多少个参数,这都会输出你的所有参数。
使用obj [0] .nick,你会得到理想的结果,
在我的情况下,同样的错误,我使用Asyanc / Await函数,为此需要为findOne添加AWAIT
Ex:const foundUser = User.findOne ({ "email" : req.body.email });
上面,在用户找到或未找到的情况下,foundUser总是包含Object值,因为它在完成findOne之前返回值。
const foundUser = await User.findOne ({ "email" : req.body.email });
如果用户不在具有提供条件的集合中,则foundUser返回null。如果用户找到了返回用户文档。
以上是关于如何使用mongoose findOne的主要内容,如果未能解决你的问题,请参考以下文章
更新 findOne()/find()/findById() 返回的文档 - mongoose